Objective-C クロージャの循環参照を回避

クラスが、自分で保持しているクロージャ(他クラスを保持していて、その他クラスがクロージャを保持している場合も)でselfを参照すると循環参照を起こして、クラスが破棄されなくなります。その結果、メモリを圧迫してしまいます。

この問題を解決する、循環参照を起こさないコードが以下です。

__weak typeof(self) weakSelf = self;
   self.closure = ^() {
       typeof(self) strongSelf = weakSelf;
       NSLog(@"%@", strongSelf.string);
   };

いいなと思ったら応援しよう!