首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在解散视图控制器(非弧形)时,为什么不保留圆圈?

在解散视图控制器(非弧形)时,为什么不保留圆圈?
EN

Stack Overflow用户
提问于 2014-11-25 08:43:33
回答 2查看 1.1K关注 0票数 2

我有这个非弧形代码,我认为它有一个问题-循环保留(self (UIViewController)拥有完全块的所有权,完全块拥有self的所有权)。但是当我调试时,它在dealloc中运行(意味着没有我想的循环保留计数)。

代码语言:javascript
复制
[self dismissViewControllerAnimated:YES completion:^{
    [self goToChatViewController:buddyEntity];
}];

有人能为我解释一下,为什么它不在这个代码中循环保留?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-25 09:39:03

在这个街区你不能持有推荐信。所以这个块在完成后就被释放了。当块释放时,释放它所持有的对象。所以一切都没问题。您可以在这样的块中勇敢地使用self

例如,如果将块用作属性或将其添加到容器中,则会出现保留周期。

票数 4
EN

Stack Overflow用户

发布于 2014-11-25 09:25:17

块秘密地是一个ObjectiveC对象。当您在后台创建一个块时,objectiveC会创建一个块类的实例(尽管很奇怪,它是在堆栈而不是堆上创建的,除非您复制了该块)。块内部使用的对象成为块对象的实例变量。

因为块对象在堆上,而不是在堆栈上--通常情况下,当您到达方法的末尾时,您所在的块对象就超出了作用域,而且一切都很好。但是,如果您的类在块上调用copy并保留一个引用,则该块将被复制到堆中。现在,您的类有一个对块的引用,而这个块有一个对您的类的引用,并且您有一个保留循环。

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

https://stackoverflow.com/questions/27122084

复制
相关文章

相似问题

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