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;
    }
  • 相关阅读:
    Codeforces 877 C. Slava and tanks
    Codeforces 877 D. Olya and Energy Drinks
    2017 10.25 NOIP模拟赛
    2017 国庆湖南 Day1
    UVA 12113 Overlapping Squares
    学大伟业 国庆Day2
    51nod 1629 B君的圆锥
    51nod 1381 硬币游戏
    [JSOI2010]满汉全席
    学大伟业 2017 国庆 Day1
  • 原文地址:https://www.cnblogs.com/yaowen/p/5315109.html
Copyright © 2011-2022 走看看