这本名为Pro Multreadingreading and Memory Management for iOS和OS X的书写了
为什么需要在autoreleasepool中注册该对象才能通过__weak限定变量使用该对象?因为使用__weak限定的变量没有强引用,所以可以在任何时候处置该对象。如果对象在autoreleasepool中注册,则在保留@autoreleasepool块之前,该对象必须存在。因此,要通过__weak变量安全地使用对象,该对象将自动在autoreleasepool中注册。
我不明白为什么__weak需要变量存在。 __weak不保留变量。如果变量不存在.__weak变量应为nil。为什么本书说"如果对象在autoreleasepool中注册,直到@autoreleasepool块被保留,对象必须存在&# 34。
如果它是在autoreleasepool中注册的。哪个池是注册的?当我使用__weak时,我没有分配自动释放池.Who可以告诉我原因。
答案 0 :(得分:2)
在阅读__weak
和__autoreleasing
限定符时,您正在阅读的书至少令人困惑,有时可能完全错误。 (这本书是一本翻译,这可能是因为使用的语言有时令人困惑。)
存储在__weak
限定变量中的引用 not 也会自动添加到自动释放池中,这与弱变量的目的相反。
在某些情况下,当从弱变量加载引用时,编译器会将其置于自动释放池中以避免竞争条件(在释放的对象与从弱变量加载的引用之间) )。你不需要关心自己,至少是直接关注这一点 - 编译器只是确保你从弱变量加载的引用在你使用它时是有效的。
您可以在问题Objective-C - weak object is registered in autoreleasepool automatically?
中找到有关此书的其他评论HTH