一,NSObject类提供了一个autorelease方法:
-(id)autorelease;
该方法预先设定了一条将来在某个时间发送的release消息,其返回值是接收消息的对象。retain消息采用了相同的技术,使嵌套调用更加容易。当给一个对象发送autorelease消息时,实际上是将该对象添加到NSAutoreleasePool中。当自动释放池被销毁时,会向该池中所有对象发送release消息。
二,
NSAutoreleasePool *pool;
pool=[[NSAutoreleasePool alloc]init];
...
[pool release];
创建一个自动释放池时,该池自动成为活动的池。释放该池时,其保留计数器值归0,然后,该池被销毁。在销毁过程中,该池释放其包含的所有对象。
当使用AppKit时,Cocoa定期自动为你创建和销毁自动释放池。通常是在程序处理完当前事件(如鼠标点击或按键)以后执行这些操作。你可以使用做任意多的自动释放对象,当不再使用它们时,自动释放池将自动为你清理这些对象。
三,你可能已经在Xcode的自动生成代码中遇见过另一种销毁自动释放池中对象的方式:-drain方法。该方法只是清空自动释放池而不销毁它。-drain方法只适用于MAC OS X 10.4及更高版本。在我们自己编写(而不是由Xcode生成)的代码中,我们使用-release方法,因为该方法适用于Mac OS的所有版本。
参考资料:《Object-C基础教程》
时间: 2024-10-13 15:09:03