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;

}

  

你可能感兴趣的:(内存管理)