【发布时间】:2014-07-23 00:48:15
【问题描述】:
我有一个关于内存释放和块/闭包的问题。
下面是Swift方法
self!.dismissViewControllerAnimated(false, completion: {
println(self);
})
或者客观C方法
[self dismissViewControllerAnimated:NO completion:^{
NSLog("%@",self);
}];
如果有人能解释在上述方法中何时 self 将被释放,我将不胜感激。是在完成块运行之后还是之前?我了解它由 ARC 处理,但我想知道 self 是否在完成块中或之后收到释放消息。因此,如果我在完成块(访问自我)中进行一些小的清理,那是否安全/可接受?
【问题讨论】:
-
肯定是在解雇完成之后。虽然不是必要之后立即。
-
如果你在闭包内引用
self,闭包将保留对已关闭视图控制器的引用。将清理放在那里的行为应该保证您的视图控制器在执行闭包之前不会被释放。 -
看这个link 这是一本关于闭包捕获的好书。
标签: ios objective-c swift automatic-ref-counting objective-c-blocks