众所周知,当没有变量引用它时,对象不会立即在ARC中释放。例如,
NSObject* obj = [[NSObject alloc] init];
obj = nil;
一段时间后,obj会释放出来。(自动释放池排水)。
现在,我想把obj dealloc设置为nil,这意味着obj不在自动释放池中。但是所有其他obj应该像以前一样运行良好,这意味着程序仍处于ARC模式。
有没有办法,可能是宏或编译器标志,这样做?
答案 0 :(得分:3)
首先:你不应该关心早期的释放。这是一种强烈的代码味道。
第二:你真的,非常确定,因为-init
没有将对象放入ARP。也许表达式会导致保留自动释放组合,但是在发布模式下进行编译应该优化它。
但是,如果它在ARP中你可以关闭Hermann Klecker提到的ARP或者 - 我认为这更好 - 找到在ARP中成为该对象的原因。没有必要这样做。
答案 1 :(得分:1)
Amin is right:该对象不在自动释放池中。创建该对象的alloc
不会使用池。另一方面,你是对的:ARC可能不会立即释放对象。
确实可以使用注释强制释放:objc_precise_lifetime
。将该值添加到变量声明将导致ARC在对象在当前作用域中不再有效时立即发送release
。
然而,Amin也是对的,这不太可能是你想要的。 ARC知道它在做什么 - 当你使用这个注释时它可以做出优化 - 除非你知道它做了什么,你应该强烈考虑让它做它的工作