保持サイクルを追跡する際に問題があります。私はそれがイベントを購読する方法と関係があると思う。擬似コードは、このようなものです:クロージャとしての機能の使用は自己を保持していますか?
override func viewDidLoad() {
func handleEvent() {
self.doSomething()
}
subscribe("eventName", block: handleEvent)
}
deinit {
unsubscribe("eventName")
}
が、これは自己/私のViewControllerに保持サイクルを作成するのでしょうか?もしそうなら、私はどうすれば周りを回ることができますか?私がクロージャを使用していたなら、私は[弱い自己]を使うことができましたが、私は関数を渡すので、とにかく[弱い自己]同等物を使うのですか?
この質問はクロージャについてですが、私はクロージャとして関数を使用することを求めています。弱い自己を関数で使うことはできません。 –
あなたのコードを間違って読んで...私の悪い。ちょうど1秒 – PeejWeej
あなたは保持サイクルがあるかどうかを判断するために、 'subscribe'が渡されたクロージャーと何をするのかを知る必要があります。それを格納せずに呼び出すか、別のクロージャーでキャプチャして保存すると( 'self'または' self'が強い参照を持つ)、保存サイクルはありません。それがストア/キャプチャを行う場合は、はい、保持サイクルがあります。あなたのコードを[mcve]に煮詰めることができれば、最も役に立ちます。 – Hamish