強力な保持サイクルが可能であり、使用する必要がある場合をどのように認識できるかを理解しようとしています[weak/unowned self]
。不必要な使用でやけどを負い、[weak/unowned self]
使用する機会を与える直前に自己の割り当てが解除されました。
たとえば、以下はself
クロージャーで参照する非同期ネットワーク呼び出しです。呼び出し自体を変数に保存せずにネットワーク呼び出しが行われるため、ここでメモリリークが発生する可能性はありますか?
NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: url)!) {
(data, response, error) in
self.data = data
)
次に、NSNotificationCenter を使用した別の例を示します。ここでは、後で非同期に呼び出しを行うことができます。
NSNotificationCenter.defaultCenter().addObserverForName(
UIApplicationSignificantTimeChangeNotification, object: nil, queue: nil) {
[unowned self] _ in
self.refresh()
}
私の質問は、強力な保持サイクルが可能なのはどのような場合ですか? クロージャーで自己を参照する非同期呼び出しまたは静的呼び出しを行っている場合、それは の候補になり[weak/unowned self]
ますか? これについて何か光を当ててくれてありがとう。