如何理解“当使用与__weak限定词的变量,对象始终在autoreleasepool注册”

问题描述:

命名的专业多线程和内存管理iOS和OS X的书所著的是如何理解“当使用与__weak限定词的变量,对象始终在autoreleasepool注册”

为什么会出现对象需要在autoreleasepool中注册才能通过__weak限定变量使用对象?由于__weak限定的变量没有强引用,因此该对象可能会在任何时候被丢弃。如果该对象在autoreleasepool中注册,则直到@autoreleasepool块留下,该对象必须存在。因此,要安全地通过__weak变量使用对象,该对象将自动注册到autoreleasepool中。

我不明白为什么__weak需要变量存在。 __weak不保留变量。如果变量不存在,__weak变量应该为零。为什么本书说“如果对象在autoreleasepool中注册,直到@autoreleasepool块留下,该对象必须存在”。

如果它在autoreleasepool中注册。哪个池是否注册?当我使用__weak时,我没有分配autoreleasepool。谁能告诉我为什么。

您正在阅读的书至少令人困惑,并且在__weak__autoreleasing限定词的介绍中可能有时完全错误。 (书是翻译,这也许可以解释使用有时会混淆语言。)存入__weak限定的变量

引用是也自动添加到自动释放池,这是违反弱变量的目的。

会发生什么情况是,在某些情况下,当从弱变量加载引用时,编译器会将其置于自动释放池中以避免竞争条件(释放对象和从弱引导对象变量)。你不需要关心自己,至少直接关心这一点 - 编译器只是确保你从弱变量加载的引用在你使用它的时候是有效的。

你可以在这个问题上这本书的其他意见Objective-C - weak object is registered in autoreleasepool automatically?

HTH