IOS面接のblockはいつループリファレンスを構築する必要がありますか?

563 ワード

ネットワークリクエストAPIではコールバックのblockを持ち,コールバックのblockではselfを持ち,selfでもネットワークリクエストAPIを持つとループリファレンスを構築する.ループリファレンスを構築したが,ネットワークリクエストが終了すると,ネットワークリクエストAPIがblockの所有を自発的に解放するため,ループチェーン全体が解かれ,ループアプリケーションが破られるためメモリ漏洩の問題はない.
- (void)clearCompletionBlock{
          //nil out to break the retain cycle
          self.successCompletionBlock = nil;
          self.failureCompletionBlock     = nil;
}

要するに、循環引用問題を解決するには主に2つの方法があります.
  • 事前に回避し、ループ参照を生成する場所でweak弱参照を使用して、ループ参照
  • を回避する.
  • 事後救済は、ループ参照が発生することを明確に知っているが、ループの1つの参照を合理的な位置で切断し、対象の逸脱回収である.