IOS面接のblockはいつループリファレンスを構築する必要がありますか?
563 ワード
ネットワークリクエストAPIではコールバックのblockを持ち,コールバックのblockではselfを持ち,selfでもネットワークリクエストAPIを持つとループリファレンスを構築する.ループリファレンスを構築したが,ネットワークリクエストが終了すると,ネットワークリクエストAPIがblockの所有を自発的に解放するため,ループチェーン全体が解かれ,ループアプリケーションが破られるためメモリ漏洩の問題はない.
要するに、循環引用問題を解決するには主に2つの方法があります.事前に回避し、ループ参照を生成する場所でweak弱参照を使用して、ループ参照 を回避する.事後救済は、ループ参照が発生することを明確に知っているが、ループの1つの参照を合理的な位置で切断し、対象の逸脱回収である.
- (void)clearCompletionBlock{
//nil out to break the retain cycle
self.successCompletionBlock = nil;
self.failureCompletionBlock = nil;
}
要するに、循環引用問題を解決するには主に2つの方法があります.