我正在初始化一个对象,然后内联地配置它。但是,在配置之前(在下面的行中),不再对以前的实例(如果以前分配过)进行解除分配,而是推迟取消分配。因此,我对它所做的所有配置最终都是一个已被释放的对象--这当然不是我想要的。
例如,如果我运行以下代码:
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()中调用的。
我怎样才能确保脱碳首先发生,为什么还没有这种情况呢?
发布于 2016-05-07 21:20:56
苹果在你背后做一些事情,让所有的应用程序都更有效率。有时实际发生的事情是令人惊讶的。然而,总有一些事情不应该真正影响到你。
一种可能的优化(我还没有亲自检查苹果是否会这么做)是在后台线程上进行交易。当对象的引用计数降到零时,该对象将被解除分配。当发生这种情况时,它被标记为“这个对象将被解除分配”,并且它将被解除分配。但不一定在将引用计数设置为0的线程中。在一个单独的线程上执行实际的去分配操作可以更好地利用多个处理器,并使您的前台应用程序运行得更快。
它不应该对您的代码产生任何影响。
https://stackoverflow.com/questions/37093281
复制相似问题