mor*_*y95 58 release object objective-c autorelease nsautoreleasepool
可能重复:
为什么要使用自动释放池?
将打开所有Objective-C起始页面,其中包含@autoreleasepool{...}
main函数声明下的默认语句.但这句话到底在做什么呢?新的Objective-C自动释放对象并删除该行不会对程序产生任何影响.这个命令真的有必要吗?
WDU*_*DUK 82
该@autoreleasepool
语句与以前完成相同的工作,而不是使用NSAutoreleasePool类.NSAutoreleasePool的工作方式有点奇怪,因为创建它会在整个应用程序中产生影响; @autoreleasepool
创建一个范围区域,使其更清晰地显示池内的内容和排水时(当它超出范围时).据Apple称,它的效率也更高.
自动释放池的概念很简单,只要对象实例被标记为自动释放(例如NSString* str = [[[NSString alloc] initWithString:@"hello"] autorelease];
),它在该时刻将具有+1的保留计数,但是在运行循环结束时,池被耗尽,并且任何标记为自动释放的对象都会使其保留计数减少.它是一种保持物体的方式,同时你准备任何可以保留它的东西.
使用ARC,虽然autorelease
开发人员不使用关键字,但管理ARC的基础系统会为您插入.(请记住:所有ARC正在插入retain
,release
并autorelease
在适当的时候呼叫你).因此,现有的AutoreleasePool概念需要保持不变.
如果删除自动释放池,则对象将开始泄漏
在引用计数环境中,Cocoa期望有一个始终可用的自动释放池.如果池不可用,则自动释放的对象不会被释放并且您会泄漏内存.在这种情况下,您的程序通常会记录适当的警告消息.
归档时间: |
|
查看次数: |
53895 次 |
最近记录: |