OC语言day06-01autorelease基本使用

2016-06-15  本文已影响34人  liyuhong165

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
上一篇下一篇

猜你喜欢

热点阅读