[英]Swift Retain Cycles and Closures
我已經嘗試了很多有關了解保留周期的研究。 我似乎無法在示例中找到任何內容。 我確實知道,如果我將屬性設置為閉包,則會發生保留周期,並且需要使用弱函數或無主函數。 但是我有兩個示例,我想知道它們是否正確完成:預先感謝,我試圖查看它們是否已經在stackoverflow上,但是找不到任何東西。
簡單的動畫
UIView.transitionWithView(self, duration: 5, options: .TransitionCrossDissolve, animations: { [weak self] in
self?.setNeedsDisplay()
return
}, completion: nil)
帶有數組的動畫
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)
}
在這兩個示例中, self
是UIView
的子類。 我只想知道我做得正確,還是我也應該將imageView用作弱引用。 謝謝。
由於該塊未附加到self
,因此這兩個都不會創建保留周期。 此外,在保證使用壽命的情況下保持周期並不是世界上最糟糕的事情。
讓我們考慮一些例子。 (抱歉,我的移動速度不是特別強,所以我將恢復為obj-c。)
- (void)doSomething:(void(^)())block {
self.block = block;
}
// elsewhere
[self doSomething:^{
self.someProperty = 5;
}];
這創建因為保留周期self
被引用(未弱)到塊內self
保持的參考。
[UIView transitionWithView:self duration:5, options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
[self setNeedsDisplay];
} completion:nil];
因為animations
塊被發送到系統,所以這不會創建保留周期-您的UIView
子類不包含對該塊的引用。
旁注 :在關閉結束時不需要return
,但是我想swift太荒謬了,並且試圖“有所幫助”。 另外,我不確定在動畫過程中是否需要調用self.setNeedsDisplay()
,因為它本身應該這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.