博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自动释放池autoreleasepool
阅读量:2352 次
发布时间:2019-05-10

本文共 967 字,大约阅读时间需要 3 分钟。

对象存入到自动释放池中,当这个池子被销毁的时候,他都会对池子中的所有的对象进行一次release操作

1:怎么把对象存到池子中

//自动释放池,大括号代表池子的作用域,可以自己随意创建

//只有在自动释放池的作用域中调用对象的autorelease方法才能够正确地将对象放入到池子中

@autoreleasepool{

     Person *p = [Person alloc]init]; //不管这个对象是在autorelease之内创建的,还是在之外创建的,只要你在池子中调                                                         用了autorelease方法,这个对象就会被放入到池子中

    [p  autorelease];//autorelease的方法的作用只是将对象放入到池子中,然后返回一个self,并不会使retainCount-1。                                    autorelease的方法必须在池子中,一个对象只能加入一次。

                              对象加入到哪个autoreleasepoll,就在哪个autoreleasepool结束后retainCount-1

}//代表池子将要被销毁,对池子中的所有的对象进行一次release操作

2:autorelease应用

》1:如果在方法中创建一个对象,最好初始化为nil,防止出现野指针错误,如

-(Food *)chiefMakeFood

{

   //1

   Food  *food = nil;//可写成  Food  *food = [Food alloc]init];

   //0

   //[food release];//会发生野指针错误

     [food  autorelease];//

   return  food;

}

》2:给外界提供一个快速获得当前对象 的快捷方法,是类方法

+(Chief *)chief

{

         Chief   *chi = [[self  alloc]init]; //self:谁调用就指向谁

        [ chi  autorelease];

         return   chi;

}

在 @autoreleasepool{

     Chief *chi = [Chief chief];

    Food *food = [chi chiefMakeFood];

NSString *name = [NSString stringWithFormat:"%@",@"啦啦啦"];//都是autorelease

转载地址:http://pxrvb.baihongyu.com/

你可能感兴趣的文章
12.轻量模式--Flyweight
查看>>
13.外观模式--Facade
查看>>
开源史上最成功的八个开源软件
查看>>
More Effective C++读书笔记
查看>>
关于assert,ASSERT,TRACE和VERIFY
查看>>
关于C++中野指针的说明
查看>>
Linux/Unix环境下的make和makefile详解
查看>>
SourceInsight添加对汇编语言文件.s和.S的支持
查看>>
windows 下实现函数打桩:拦截API方式
查看>>
获取Windows系统版本
查看>>
漫谈兼容内核之十二:Windows的APC机制
查看>>
21.windbg-.lastevent、!analyze(dump分析、异常错误码查询)
查看>>
16.windbg-.frame、dt(切换局部上下文、查找结构体)
查看>>
开源任务管理器 Process Hacker (Windows)
查看>>
快速发现Windows中毒的工具:Process Hacker
查看>>
Process Hacker源码中的用户态hook的做法
查看>>
Get IT技能知识库 50个领域一键直达
查看>>
浅析C++中的this指针及汇编实现
查看>>
关于32位程序在64位系统下运行中需要注意的重定向问题(有图有真相)(***)
查看>>
解决win10系统中截图异常放大的问题
查看>>