簡體   English   中英

快速保持周期和關閉

[英]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)
}

在這兩個示例中, selfUIView的子類。 我只想知道我做得正確,還是我也應該將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM