首页 > 代码库 > autorelease基本概念

autorelease基本概念

//

//  main.m

//  01-autorelease基本概念

//

//  Created by apple on 14-3-18.

//  Copyright (c) 2014年 apple. All rights reserved.

//

 

//内存管理原则(配对原则):只要出现了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

    

        //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 {

        //存入多少次auto re le a se调用多少次re le a se

        [p autorelease];//加入第一次

        

        [p autorelease];//加入第二次

        

        NSLog(@"abc");

    }//[p release]0 [p release](第二次野指针操作)

    

     NSLog(@"cbd");

    */

    

    //示例5

    /*

    //1

    Person * p = [[Person alloc] init];

    

    @autoreleasepool {

        

        @autoreleasepool {

            //在哪个池子调用auto re le a se作用域就在哪个池子

            [p autorelease];

        }//[p release] 0

        

    }

    */

    

    

    Person * p = [[Person alloc] init];

    

    @autoreleasepool {

        

        [p autorelease];

        

        @autoreleasepool {

            

         

            [p autorelease];

        }//[p release] 0

        

        

    }//[p release];

    

    

    return 0;

}

 

autorelease基本概念