1

我正在使用NSOperation來處理iOS應用程序中的後臺處理,並且我試圖瞭解目標/操作模式。在委託模式中,委託被作爲弱引用保存,並且委託對象負責將其他對象的委託字段設置爲零。根據我的理解,在目標/行動模式中,出於類似的原因,目標被認爲是弱參考。然而,當目標對象deallocs和NSOperations時,當目標被釋放時,操作仍然可能坐在隊列上時,目標字段「nil out」似乎不那麼容易。用NS操作處理目標/操作弱引用

在這種情況下應如何處理內存管理(NSOperation執行後臺處理,然後使用目標/操作將值返回給創建者NSOperation)?

回答

1

The Target中所述,如果控件可能發送操作,則確保目標可用。在實踐中,這不是一個問題,因爲目標通常是之前創建的控制器,並在控件之後解除分配。

如果您從操作發送操作消息,則需要確保在操作完成之後才能釋放目標。一種方法可能是讓目標保留自己,直到操作完成。

另一種方法可能是使用操作和目標都知道的中間對象。該操作可以將中間對象視爲目標的代理,並將操作發送給它,而不是直接將其發送給目標,並且目標可以在解除分配後正確更新中間件。目標和操作都可以保留中間體而不創建保留週期。我不確定這種方法是我的第一選擇 - 看起來有點過於複雜 - 但它可能會有所幫助。

0

UIControl需要一個目標的__弱引用,所以目標操作方法不會改變目標的生命週期。

NSTimer接受目標的__strong引用,目標不會釋放,直到NSTimer對象釋放。這可能會導致保留圈。

試試這個豆莢:https://github.com/Elenionl/ELAutoSelector