smi*_*t04 6 ios retain-cycle swift
我试图对理解保留周期进行大量研究.我似乎无法在我的例子中找到任何东西.我知道如果我将一个属性设置为一个闭包,那么就会发生一个保留周期,需要使用弱或无主.但我有两个例子,我想知道它们是否正确完成:在此先感谢,我已经试着看看它们是否已经在stackoverflow上但是找不到任何东西.
简单的动画
UIView.transitionWithView(self, duration: 5, options: .TransitionCrossDissolve, animations: { [weak self] in
self?.setNeedsDisplay()
return
}, completion: nil)
Run Code Online (Sandbox Code Playgroud)
带数组的动画
for imageView in self.townImages {
UIView.transitionWithView(imageView, duration: 0.3, options: .TransitionCrossDissolve, animations: { () -> Void in
imageView.image = UIImage(named: self.getImages()[count++])
}, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
在这两个例子中self都是一个子类UIView.我只是想知道我正在做的,或者我是否应该使用imageView作为弱引用.谢谢.
这些都不会创建保留循环,因为该块未附加到self。此外,具有保证寿命的保留周期并不是世界上最糟糕的事情。
让我们考虑一些例子。(抱歉,我的 swift 不是特别强,所以我要恢复到 obj-c。)
- (void)doSomething:(void(^)())block {
self.block = block;
}
// elsewhere
[self doSomething:^{
self.someProperty = 5;
}];
Run Code Online (Sandbox Code Playgroud)
这会创建一个保留周期,因为self在保存引用的块内被引用(不是弱self引用)。
[UIView transitionWithView:self duration:5, options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
[self setNeedsDisplay];
} completion:nil];
Run Code Online (Sandbox Code Playgroud)
这不会创建保留周期,因为该animations块被发送到系统——您的UIView子类不保存对该块的引用。
旁注:你不需要return在结束时有 a ,但我想 swift 很荒谬,并且试图“有帮助”。另外,我不确定您是否需要self.setNeedsDisplay()在动画期间调用,因为它应该自己执行此操作......
| 归档时间: |
|
| 查看次数: |
2260 次 |
| 最近记录: |