zoukankan      html  css  js  c++  java
  • 0c-34-自动释放池

    #import <Foundation/Foundation.h>
    #import "Person.h"
    Person * creatPerson()
    {
        Person *p = [[Person alloc] init];
        return p;
    }
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            //Person *P0 = creatPerson();//[[Person alloc] init]只能由p0释放,但是是p创建的违反了谁创建谁释放原则。
            
            // autorelease:当对象调用这个方法时,就把对象放到了自动释放池中,延迟释放。
            Person *P = [[[Person alloc] init] autorelease];
            P.age = 10;
            [P retain]; // 2
            
            // 不关注对象什么时候被释放.
            Person *p1 = [[[Person alloc]init] autorelease];
            p1.age = 100;
            [p1 retain];
            
        }// 出了花括号,会对池子里面的所有调用了autorelease方法的对象,做一次release操作.
        return 0;
    }

    自动释放池的嵌套使用:

    #import <Foundation/Foundation.h>
    
    // 以栈的结构进行存储的,先进后出
    int main(int argc, const char * argv[]) {
      // 1号池子
        @autoreleasepool {
            //2号池子
            @autoreleasepool {
                //3号池子
                @autoreleasepool {
                    Person *p = [Person new];
                }
            }
        }
        //3号池子先释放,1号池子最互释放。
        return 0;
    }
  • 相关阅读:
    第四周总结&实验报告二
    第三周实验总结
    2019秋第二周总结
    2019春期末总结
    C语言第四次实验报告
    第三次设计报告
    2019第二次实验设计报告
    2019第一次实验设计报告
    2019第十二周作业
    第五周课程总结&试验报告(三)
  • 原文地址:https://www.cnblogs.com/yaowen/p/5315109.html
Copyright © 2011-2022 走看看