問題タブ [retain-cycle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
39532 参照

ios - dispatch_async 関数で弱い自己を使用する

__weak selfinsideの使用に関する多くの投稿を読みましたがdispatch_async、今は少し混乱しています。

私が持っている場合:

を使用する必要がありますか__weak self。場合によってdispatch_async は必要ないことを読んだので__weak self

最後のコメントはこちら

0 投票する
2 に答える
77 参照

cocoa-touch - リテインサイクルは時々大丈夫ですか?

アプリの全期間にわたってシングルトンとして存在する必要があるオブジェクトがあるとします。NSTimerこのオブジェクトに、タイマーのターゲットとしてのへの強い参照が含まれていても問題ないでしょうか? これは保持サイクルになりますが、マイナス面は見られません。OS がメモリを解放しようとするとき、とにかく呼び出す必要はありませdeallocん。

0 投票する
1 に答える
1782 参照

objective-c - KVO オブザーバーを自己に追加すると、メモリ リークが発生しますか?

nsobjectには、それ自体を観察したいプロパティ「keyPath」があり、使用します

上記の行は保持サイクルを引き起こしますか?

この質問を提示するのは、一連のセッター関数を書き直す代わりに実行可能な方法があるかどうかを知りたかったからです。

0 投票する
2 に答える
313 参照

objective-c - ARC下のブロックで微妙な保持サイクルを理解する

Matt GallowayによるEffective Objective-Cの本から入手したコードスニペットを研究しています。スニペットは次のとおりです(少し変更しました)。

著者が述べたように、このようなパターンはさまざまなネットワーク ライブラリで使用され、保持サイクルがあります。オブジェクト グラフの観点から考えると、networkFetcherインスタンスはcompletionHandlerプロパティ ( copyied ) を介してブロックを保持するのに対し、ブロックはnetworkFetcherで使用するため を保持するため、保持サイクルは私にとって非常に明白ですNSLog

ここで、ブロックを解除するには、データのダウンロードが完了したときにNetworkFetcher完了ハンドラーを設定する必要があります。nil

Ok。このようにして、保持サイクルはもうありません。ブロックは、実行されると、 への参照を解放し、networkFetcherはブロックへの参照をnetworkFetcher作成nilします。

さて、私の質問はスニペットの実行フローに関するものです。次の一連の動作は正しいですか?

  1. networkFetcher完了ハンドラを実行します
  2. ブロックが実行されます
  3. ブロックはへの参照を解放しますnetworkFetcher
  4. networkFetcherブロックへの参照を解放する

私の疑問は、アクション 3) と 4) に依存しています。3) が 4) の前に実行された場合、誰も参照を持っていないnetworkFetcherため、いつでも解放できます (ARC は の最後に解放呼び出しを配置し​​ますdownloadData)。私は間違っていますか、それとも何か不足していますか?

質問が明確であることを願っています。

0 投票する
1 に答える
717 参照

ios - スーパービューから削除した後も uiviewcontroller が保持されますが、保持サイクルの問題ですか?

ボタンを長押しすると、UIViewController(AddProduct) を含む UIPopover が開きます。ボタンを長押しすると、製品の追加には、ユーザーを ABCViewControl に戻すキャンセル ボタンが含まれます。 .この時点までは問題ありません。このようなもの..

}

AddProduct には、別の uiviewcontroller(AddProductSeparateViewController) を開く編集ボタンが含まれています。それ (AddProduct) にはキャンセル ボタンも含まれています。キャンセル ボタンをクリックすると、ユーザーは ABCViewCintroller に戻ります。

**問題:** AddProduct はこのプロセスで解放されますが、AddProductSeparateViewController は、割り当てツールのライブ オブジェクトと dealloc ブレークポイントに従って解放されません。

AddProductSeparateViewController を開くための AddProduct のコードは次のとおりです。

}

このデリゲートは基本的に、AddProductSeparateViewController を開くように ABCViewController に通知します。

}

}

キャンセルする AddProductSeparateViewController のコードは次のとおりです。

}

このプロセスで AddProductSeparateViewController がリリースされないのはなぜですか。

ありがとう

0 投票する
1 に答える
335 参照

ios - weakSelf によって呼び出されたメソッド内から weakSelf を参照すると、リテイン サイクルが発生しますか?

単純な保持サイクルがどのように作成されるかは理解していると思いますが、より複雑な状況を完全には理解していません。

リテイン サイクルを引き起こすコードを次に示します。(右?)

その保持サイクルを回避するために、次への弱い参照を作成しますself

これまでのところ、私が正しいことを願っています。

ここが興味深いところです。テキストの高さを計算してキャッシュし、tableView で reloadData を呼び出すメソッドがあります。そのメソッドは非同期的に実行され、終了時にその completionBlock (mainThread 上) を呼び出します。

welfこのコードは、 の completionBlock で自分自身をキャプチャするため、保持サイクルを引き起こしrelayoutWithCompletion:ますか? welf は弱い参照であるため、保持サイクルを回避すると考えるのは正しいですか?

もう一歩踏み込んだら?

それはずっとウェルフです...

0 投票する
2 に答える
142 参照

ios - デリゲートで _weak 参照を使用することが推奨される理由

こんにちは、誰かがデリゲートに強い参照ではなく _weak 参照を使用することをお勧めする理由を詳しく説明してくれますか? ただし、デリゲートに強い参照を使用することもできます。どの状況で強い参照を使用する必要があり、どの状況でデリゲートに _weak 参照を使用する必要があるかを簡単な方法で説明する、より適切でわかりやすい例を教えてください。

スタックオーバーフローに関する関連する質問の1つを調べました

デリゲートの「強力な」参照を使用しても問題ありませんか?

しかし、それは私の概念を適切にクリアしませんでした。

どんな助けでも大歓迎です!!

ありがとう。