gpt4 book ai didi

ios - Dealloc 正在推迟

转载 作者:行者123 更新时间:2023-11-30 13:26:43 29 4
gpt4 key购买 nike

我正在初始化一个对象,然后内联配置它。但是,不是在配置前一个实例(如果之前已分配)之前将其释放(在紧随其后的行中),而是推迟释放。因此,我对它所做的所有配置最终都成为一个已释放的对象 - 这当然不是我想要的。

例如,如果我运行此代码:

if paintingView != nil {
paintingView.removeFromSuperview()
}

print("^^^^^^^^^^^^^ About to init")
paintingView = PaintingView(frame: TDTDeviceUtilites.screenFrame())

print("^^^^^^^^^^^^^ About to add view")
view.addSubview(paintingView)

print("^^^^^^^^^^^^^ About to configure")
self.configurePaintingView()

我将在控制台中看到以下消息:

^^^^^^^^^^^^^ About to init
^^^^^^^^^^^^^ About to add view
^^^^^^^^^^^^^ About to configure
***** Painting View Dealloc ***** //message from the dealloc method of the PaintingView class.

我希望dealloc 直接发生在init 行之后。到底是怎么回事?请注意,此代码是在 NSOperationQueue() 中调用的。

如何确保解除分配首先发生,为什么情况并非如此?

最佳答案

Apple 在你背后做事,让所有应用程序更加高效。有时实际发生的事情是令人惊讶的。然而,总是那些不应该真正影响你的事情。

一个可能的优化(我没有亲自检查苹果是否这样做)是在后台线程上取消分配事物。当对象的引用计数减至零时,该对象将被释放。当这种情况发生时,它被标记为“这个对象将被释放”,并且它被释放。但不一定是在将引用计数设置为 0 的线程中。在单独的线程上进行实际的释放可以更好地利用多个处理器,并使前台应用程序运行得更快。

它不应该对您的代码产生任何影响。

关于ios - Dealloc 正在推迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37093281/

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