首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dealloc正在被推迟

Dealloc正在被推迟
EN

Stack Overflow用户
提问于 2016-05-07 20:18:47
回答 1查看 79关注 0票数 0

我正在初始化一个对象,然后内联地配置它。但是,在配置之前(在下面的行中),不再对以前的实例(如果以前分配过)进行解除分配,而是推迟取消分配。因此,我对它所做的所有配置最终都是一个已被释放的对象--这当然不是我想要的。

例如,如果我运行以下代码:

代码语言:javascript
复制
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()

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

代码语言:javascript
复制
^^^^^^^^^^^^^ 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()中调用的。

我怎样才能确保脱碳首先发生,为什么还没有这种情况呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-07 21:20:56

苹果在你背后做一些事情,让所有的应用程序都更有效率。有时实际发生的事情是令人惊讶的。然而,总有一些事情不应该真正影响到你。

一种可能的优化(我还没有亲自检查苹果是否会这么做)是在后台线程上进行交易。当对象的引用计数降到零时,该对象将被解除分配。当发生这种情况时,它被标记为“这个对象将被解除分配”,并且它将被解除分配。但不一定在将引用计数设置为0的线程中。在一个单独的线程上执行实际的去分配操作可以更好地利用多个处理器,并使您的前台应用程序运行得更快。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37093281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档