如何引用autorelease池中的对象?

我想知道autorelease池是否拥有它所拥有的对象的强或弱引用。 我猜他们很弱。 当我将一个对象添加到自动释放池时,它不会立即释放,但会在池被耗尽时释放,对吧? 所以引用应该是弱的,即引用计数(或保留计数)在向autorelease池添加对象时保持不变?


在垃圾收集内存管理环境(弱指针即使被引用时会自动释放和清除)的背景下,谈论强与弱引用是有意义的。 启用GC后,所有保留/释放/自动释放调用本质上不做任何操作(尽管NSAutoreleasePool -drain方法触发垃圾回收)。

现在,由于您已将此问题标记为与iPhone相关,并且iPhone上没有垃圾回收,因此我假设您指的是定期引用计数,强烈的意思是增加引用对象的保留计数,意味着只存储指针值。

autorelease方法本质autorelease对象的所有权从调用代码移到当前自动释放池,您可以想到调用代码调用释放和调用保留池。

所以这个参考是有效的,但是你的代码失去了所有权和释放责任。 释放/释放autorelease池时会调用对象release


autorelease池的重点在于它是一个延期发布。 例如,你可以调用一个本地对象上的autorelease,这个对象将在一个方法中返回,这样即使在方法返回时你失去了对象的引用,它也会被释放。


是。 保留计数保持不变,你可以检查,它是这样的:

id obj = [[NSObject alloc]init];
    NSLog([NSString stringWithFormat: @"%d", [obj retainCount]]);
    [obj autorelease];
    NSLog([NSString stringWithFormat: @"%d", [obj retainCount]]);
链接地址: http://www.djcxy.com/p/53267.html

上一篇: How are objects in an autorelease pool referenced?

下一篇: When does autorelease actually cause a release in Cocoa Touch?