为什么在表达式中访问__weak引用不再使用自动释放池?

时间:2014-04-11 18:58:50

标签: objective-c objective-c-runtime

正如本书"适用于iOS和OS X的专业多线程和内存管理"说:"当通过__weak限定变量访问对象时,该对象已被添加到自动释放池" http://bit.ly/QdWX6n

id __weak obj1 = obj;
NSLog(@"%@", obj1);

源代码等同于以下内容:

/* pseudo code by the compiler */
id obj1;
objc_initWeak(&obj1, obj);
id tmp = objc_loadWeakRetained(&obj1); objc_autorelease(tmp);
NSLog(@"%@", tmp); objc_destroyWeak(&obj1);

我在阅读本书时测试了这段代码。一切都像书中的一样。 但是现在我在自动释放池中没有任何对象。而不是汇编程序对我说使用弱引用对象看起来像这样:

objc_loadWeakRetained
* using
objc_release

因此,在自动释放池中没有任何内容,并且对象在使用后立即释放。

问题:改变了什么,现在为什么会这样?在哪些情况下调用objc_loadWeak,而objc_loadWeakRetained只调用objc_release

0 个答案:

没有答案