在ARC中标记对象un-AutoRelease

时间:2016-02-16 08:45:26

标签: ios objective-c automatic-ref-counting

众所周知,当没有变量引用它时,对象不会立即在ARC中释放。例如,

NSObject* obj = [[NSObject alloc] init];
obj = nil;
一段时间后,obj会释放出来。(自动释放池排水)。

现在,我想把obj dealloc设置为nil,这意味着obj不在自动释放池中。但是所有其他obj应该像以前一样运行良好,这意味着程序仍处于ARC模式。

有没有办法,可能是宏或编译器标志,这样做?

2 个答案:

答案 0 :(得分:3)

首先:你不应该关心早期的释放。这是一种强烈的代码味道。

第二:你真的,非常确定,因为-init 没有将对象放入ARP。也许表达式会导致保留自动释放组合,但是在发布模式下进行编译应该优化它。

但是,如果它在ARP中你可以关闭Hermann Klecker提到的ARP或者 - 我认为这更好 - 找到在ARP中成为该对象的原因。没有必要这样做。

答案 1 :(得分:1)

Amin is right:该对象不在自动释放池中。创建该对象的alloc不会使用池。另一方面,你是对的:ARC可能不会立即释放对象。

确实可以使用注释强制释放:objc_precise_lifetime。将该值添加到变量声明将导致ARC在对象在当前作用域中不再有效时立即发送release

然而,Amin也是对的,这不太可能是你想要的。 ARC知道它在做什么 - 当你使用这个注释时它可以做出优化 - 除非你知道它做了什么,你应该强烈考虑让它做它的工作