我有一个使用ARC库的非ARC项目。如果我应该释放库方法返回的对象,我很困惑。这里有一些例子:从非ARC代码调用ARC方法
- (void)test{
LibObject* obj1 = [[LibObject alloc] init];
LibObject* obj2 = [obj1 otherObj];
[obj1 release]; //should I release it?
[obj2 release]; //should I release it?
}
就我所知,如果对象在autorelease池中,我应该放弃它。否则,我应该释放它。
然而,the ARC document说
当从这样的函数或方法返回,ARC保留在return语句的评价点的值,然后离开所有本地范围,然后平衡了保留同时确保价值贯穿呼叫边界。在最坏的情况下,这可能涉及自动释放,但呼叫者不能认为该值实际上在自动释放池中。
该文件是否意味着我应该始终释放该对象,因为我不能假定该对象是autoreleased?
这实际上并不能证明任何事情,因为'retainCount'既不会反映自动释放状态,也不会反映任何在线程(或任何内部实现细节)上的活动。巧合,你的结论是正确的。 – bbum
@bbum你误解了我的代码。这里的retainCount没有显示任何内容。演示代码证明了底层autorelease池为我们做了魔术。 – howanghk
那么为什么有retainCount呢?返回的值在此上下文中无用。 – bbum