OC语言day06-01autorelease基本使用

pragma mark autorelease基本使用

pragma mark 概念

/**
 autorelease 基本概念
 
 作用 
 会对池子里面的所有对象做一次release操作
 
 好处
 不用再关心对象的释放时间
 不用再关心什么时候调用release
 
 */

pragma mark 代码

#import <Foundation/Foundation.h>
#pragma mark 类
#import "Person.h"
#pragma mark main函数
int main(int argc, const char * argv[])
{
    /*

    @autoreleasepool {
         Person *p = [[Person alloc]init];
         [p run];
         
         #warning 时时刻刻都关注对象的什么时候被释放
         [p release];
         p = nil;
         
         
         //         [Person run]: message sent to deallocated instance 0x1006060f0
         //         野指针的错误 : 给一个已经 释放的对象 发送消息
         [p run];
    }
     */

    /*
    @autoreleasepool { // 创建一个自动释放池
        

        
        Person *p = [[Person alloc]init];
        
        // 不用关心对象什么时候释放,只要能够访问p的地方都可以使用p
        [p autorelease];    // 只要调用了autorelease, 那么久不用·调用release了
        
//        [p retain];
        
        [p run];
    }  // 自动释放池销毁了,给自动释放池中所有的对象 发送 一条release消息
     */
    
#warning autorelease 其它写法 @autoreleasepool ios5之后写的
    /*
    @autoreleasepool
    {
        Person *p = [[[Person alloc]init]autorelease];
        [p autorelease];
        
        [p run];
        
    }
     */
#warning auterelease iOS5之前的创建方式
    // 创建一个自动释放池
    // 自动释放池只是将release延迟了而已,
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
    Person *p = [[Person alloc]init];
    
    // 销毁一个自动释放池
    [pool release];
    return 0;
}
Person.h //人类
#import <Foundation/Foundation.h>

@interface Person : NSObject

- (void)run;
@end
Person.m
#import "Person.h"

@implementation Person

- (void)run
{
    NSLog(@"%s",__func__);
}

-(void)dealloc
{
    NSLog(@"%s",__func__);
    [super dealloc];
}
@end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容