gpt4 book ai didi

ios - 如何理解“当使用带有__weak限定词的变量时,该对象总是在autoreleasepool中注册”

转载 作者:行者123 更新时间:2023-12-01 19:55:45 25 4
gpt4 key购买 nike

名为《面向iOS和OS X的Pro多线程和内存管理》的书写道:

为什么要通过__weak限定变量使用对象才能在autoreleasepool中注册该对象?因为使用__weak限定的变量没有强引用,所以该对象可能在任何时候被处理。如果对象已在autoreleasepool中注册,则在保留@autoreleasepool块之前,该对象必须存在。因此,为了安全地通过__weak变量使用对象,该对象会自动注册到autoreleasepool中。

我不明白为什么__weak需要变量存在。 __weak不会保留该变量。如果变量不存在。__weak变量应为nil。为什么这本书说“如果对象已在autoreleasepool中注册,则在保留@autoreleasepool块之前,该对象必须存在”。

如果它是在autoreleasepool中注册的,它是在哪个池中注册的?当我使用__weak时,我不分配autoreleasepool。谁可以告诉我原因。

最佳答案

您正在阅读的书在__weak__autoreleasing限定词的介绍中至少令人困惑,有时甚至是完全错误的。 (这本书是翻译,这可能解释了有时使用的令人困惑的语言。)

存储在__weak合格变量中的引用也不会自动添加到自动释放池中,这与弱变量的目的相反。

确实发生的情况是,在某些情况下,当从弱变量加载引用时,编译器会将其放入自动释放池中,以避免出现竞争状况(在释放对象与从弱变量加载其引用之间)。您无需为此而担心,至少不必直接担心-编译器只是确保从弱变量加载的引用在您使用时是有效的。

您可以在Objective-C - weak object is registered in autoreleasepool automatically?问题中找到这本书的其他评论

高温超导

关于ios - 如何理解“当使用带有__weak限定词的变量时,该对象总是在autoreleasepool中注册”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42733829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com