为什么ARC不能使用常规版本?
示例:
[weakObject doSomething];
根据我的理解,ARC将其变为:
Object *strongObject = objc_autorelease(objc_loadWeakRetained(weakObject));
[strongObject doSomething];
为什么ARC不这样做呢?:
Object *strongObject = objc_loadWeakRetained(weakObject);
[strongObject doSomething];
objc_release(strongObject);
我想尽可能多地消除ARC中的自动释放。我用GCD做了很多异步线程,最后我不得不添加自动释放池:
dispatch_async(self.myQueue, ^{
@autoreleasepool{
[weakObject doSomethingBig];
}
});
答案 0 :(得分:2)
我无法解释为什么ARC编译器会这样做,但是 如果我正确理解生成的汇编代码,请使用以下模式
dispatch_async(self.myQueue, ^{
Object *strongObject = weakObject;
[strongObject doSomething];
});
被翻译为objc_loadWeakRetained()
,...,objc_release()
,以便对象
没有被放入自动释放池。