【发布时间】:2015-01-23 04:23:56
【问题描述】:
我在非arc中有这段代码,我认为它有问题-circle retain(self(UIViewController)拥有complete-block的所有权,complete-block拥有self的所有权 )。但是当我调试时,它在 dealloc 中运行(意味着我认为没有循环保留计数)
[self dismissViewControllerAnimated:YES completion:^{
[self goToChatViewController:buddyEntity];
}];
谁能帮我解释一下,为什么这段代码中没有圈保留?
【问题讨论】:
-
在块中使用 self 有时会创建一个保留循环。 99% 的情况下它不会创建保留周期,并且非常安全。关键是知道什么时候出现问题……有很多可用的文档。 Stack Overflow 不是解释这一点的地方。在没有看到更多代码的情况下,我无法告诉您是否有保留周期。
-
我认为上面的代码足以解决这个问题。我认为在我看来,self 持有完成块,完成块持有自己。但我不知道“我脑子里有什么问题”,为什么它不圈存。为什么你说“99% 的时间它不会创建保留周期”。我认为它是 100% 圈保留,但它不正确
-
是什么让你认为上面的代码会创建一个保留循环?
-
因为我认为“self hold completion-block,completion-block hold self”
-
因为你没有使用 ARC,所以没有任何东西可以保留任何东西。
标签: ios objective-c