Objective c 为什么使用弱引用时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

为什么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];
    }
});

我无法解释为什么ARC编译器会这样做,但是 如果我正确理解生成的汇编代码,请使用以下模式

dispatch_async(self.myQueue, ^{
    Object *strongObject = weakObject;
    [strongObject doSomething];
});
转换为
objc\u loadWeakRetained()
,…,
objc\u release()
,以便
没有放入自动释放池。

基本上缺乏足够智能的编译器。可能值得一份bug报告,尽管它可能已经存档,并且是众所周知的。你从哪里得到weakObject?