Objective c 为什么使用弱引用时ARC自动释放?
为什么ARC不能使用常规版本 例如:Objective c 为什么使用弱引用时ARC自动释放?,objective-c,automatic-ref-counting,Objective C,Automatic Ref Counting,为什么ARC不能使用常规版本 例如: [weakObject doSomething]; 据我所知,ARC将此转化为: Object *strongObject = objc_autorelease(objc_loadWeakRetained(weakObject)); [strongObject doSomething]; 为什么ARC不这样做呢 Object *strongObject = objc_loadWeakRetained(weakObject); [strongObject
[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];
}
});
我无法解释为什么ARC编译器会这样做,但是 如果我正确理解生成的汇编代码,请使用以下模式
dispatch_async(self.myQueue, ^{
Object *strongObject = weakObject;
[strongObject doSomething];
});
转换为objc\u loadWeakRetained()
,…,objc\u release()
,以便
没有放入自动释放池。基本上缺乏足够智能的编译器。可能值得一份bug报告,尽管它可能已经存档,并且是众所周知的。你从哪里得到weakObject?