首页 > 代码库 > OC 内存管理-02 autorelease 概念 以及用法

OC 内存管理-02 autorelease 概念 以及用法

(1)	@autoreleasepool { }//自动释放池代表,池子将要被销毁,对池子中所有的对象进行一次release操作(2)	不管你这个对象时在@autoreleasepool 之内创建的还是在之外创建的,只要你在池子中调用了autorelease那么这个对象就会被放入到池子中(3)	只有在自动释放池的作用域中调用对象的autorelease方法才能够正确的讲对象放入到池子中 (4)	如果在自动释放池中一个对象被多次释放[autorelease],那么会报野指针错误----------------------------验证代码---------------------////  main.m////内存管理原则(配对原则):只要出现了new,alloc,retain方法,就要配对出现release,autorelease//对象存入到自动释放池中,当这个池子被销毁的时候他会对池子中所有的对象进行一次release操作//怎么把对象存到池子中#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]){    /* 示例1    //自动释放池    //大括号代表池子的作用域    @autoreleasepool    {             //release 功能 retaincount - 1     //autorelease 好像功能也是 retaincount - 1 ?        //1        Person * p = [[Person alloc] init];//        [p release];//retainCount立即 -1        [p autorelease]; //autorelease方法的作用只是将对象放入到池子中,然后返回一个self                NSLog(@"asdfasdf");             }//代表,池子将要被销毁,对池子中所有的对象进行一次release操作,[p release] 0     */        /*    //autoreleasepool我么可以自己随意的创建        // 示例2    //1//不管你这个对象时在@autoreleasepool 之内创建的还是在之外创建的,只要你在池子中调用了autorelease那么这个对象就会被放入到池子中    Person * p = [[Person alloc ] init];        @autoreleasepool {                [p autorelease];            }//p 0    */    // 示例3    /*    //1 只有在自动释放池的作用域中调用对象的autorelease方法才能够正确的讲对象放入到池子中    Person * p = [[Person alloc] init];    [p autorelease];        NSLog(@"aaaa");    @autoreleasepool {            }    NSLog(@"bbb");     */    //示例4    /*    // 1    Person *  p = [[Person alloc] init];        @autoreleasepool {                [p autorelease];//加入第一次                [p autorelease];//加入第二次                NSLog(@"abc");    }//[p release]0 [p release]         NSLog(@"cbd");    */        //示例5    /*    //1    Person * p = [[Person alloc] init];        @autoreleasepool {                @autoreleasepool {                        [p autorelease];        }//?[p release] 0            }    */            Person * p = [[Person alloc] init];        @autoreleasepool {                [p autorelease];                @autoreleasepool {                                 [p autorelease];        }//[p release] 0                    }//[p release];            return 0;}

  

OC 内存管理-02 autorelease 概念 以及用法