Objective-C クロージャの循環参照を回避
クラスが、自分で保持しているクロージャ(他クラスを保持していて、その他クラスがクロージャを保持している場合も)でselfを参照すると循環参照を起こして、クラスが破棄されなくなります。その結果、メモリを圧迫してしまいます。
この問題を解決する、循環参照を起こさないコードが以下です。
__weak typeof(self) weakSelf = self;
self.closure = ^() {
typeof(self) strongSelf = weakSelf;
NSLog(@"%@", strongSelf.string);
};