美文网首页
OC语言day06-02-2自动释放池注意事项

OC语言day06-02-2自动释放池注意事项

作者: liyuhong165 | 来源:发表于2016-06-15 23:13 被阅读38次

    pragma mark 自动释放池注意事项

    pragma mark 概念

    /**
     自动释放池 是延迟释放对象
     */
    

    pragma mark 代码

    #import <Foundation/Foundation.h>
    #pragma mark 类
    #import "Person.h"
    #pragma mark main函数
    int main(int argc, const char * argv[])
    {
        
        /*
        Person *p = [[Person alloc]init];
        @autoreleasepool {
            
            
            // 2. 在自动释放池中创建了对象,一定要调用autorelease,才会将对象放入自动释放池中
    //        Person *p =[[Person alloc]init];
    //        [p run];
    
            // 3. 只要在自动释放池中 调用 autorelease, 就会将对象放入自动释放池
            p = [p autorelease];
            [p run];
    
        }
        // 1.一定要在自动释放池中调用autorelease,才会将对象放入自动释放池中
    //    Person *p = [[[Person alloc]init]autorelease];
         */
        
    #warning 注意事项
        // 4. 一个程序中可以创建N个自动释放池,并且自动释放池还可以嵌套
        //  如果存在多个自动释放池的时候, 自动释放池是以"栈"的形势存储的 [此处的栈是一种数据结构,不是之前说的"栈、堆"是存储空间]
        // 栈的特点: 先进后出 (羽毛球桶就是栈 -- 先进后出)
        
        // 给一个对象发送一条 autorelease消息, 永远会将对象放到 栈顶的 自动释放池
        @autoreleasepool { // 创建第一个自动释放池
            @autoreleasepool { // 创建第二个自动释放池
                @autoreleasepool { // 创建第三个自动释放池
                    Person *p = [[[Person alloc]init]autorelease];
                    [p run];
                } // 第三个释放池销毁
                
                Person *p = [[[Person alloc]init]autorelease];
                [p run];
                
            } // 第二个释放池销毁
        } // 第一个释放池销毁
        
        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
    

    相关文章

      网友评论

          本文标题:OC语言day06-02-2自动释放池注意事项

          本文链接:https://www.haomeiwen.com/subject/ubcmdttx.html