問題タブ [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.
ios - dispatch_async 関数で弱い自己を使用する
__weak self
insideの使用に関する多くの投稿を読みましたがdispatch_async
、今は少し混乱しています。
私が持っている場合:
を使用する必要がありますか__weak self
。場合によってdispatch_async
は必要ないことを読んだので__weak self
。
cocoa-touch - リテインサイクルは時々大丈夫ですか?
アプリの全期間にわたってシングルトンとして存在する必要があるオブジェクトがあるとします。NSTimer
このオブジェクトに、タイマーのターゲットとしてのへの強い参照が含まれていても問題ないでしょうか? これは保持サイクルになりますが、マイナス面は見られません。OS がメモリを解放しようとするとき、とにかく呼び出す必要はありませdealloc
ん。
objective-c - KVO オブザーバーを自己に追加すると、メモリ リークが発生しますか?
nsobjectには、それ自体を観察したいプロパティ「keyPath」があり、使用します
上記の行は保持サイクルを引き起こしますか?
この質問を提示するのは、一連のセッター関数を書き直す代わりに実行可能な方法があるかどうかを知りたかったからです。
objective-c - ARC下のブロックで微妙な保持サイクルを理解する
Matt GallowayによるEffective Objective-Cの本から入手したコードスニペットを研究しています。スニペットは次のとおりです(少し変更しました)。
著者が述べたように、このようなパターンはさまざまなネットワーク ライブラリで使用され、保持サイクルがあります。オブジェクト グラフの観点から考えると、networkFetcher
インスタンスはcompletionHandler
プロパティ ( copy
ied ) を介してブロックを保持するのに対し、ブロックはnetworkFetcher
で使用するため を保持するため、保持サイクルは私にとって非常に明白ですNSLog
。
ここで、ブロックを解除するには、データのダウンロードが完了したときにNetworkFetcher
完了ハンドラーを設定する必要があります。nil
Ok。このようにして、保持サイクルはもうありません。ブロックは、実行されると、 への参照を解放し、networkFetcher
はブロックへの参照をnetworkFetcher
作成nil
します。
さて、私の質問はスニペットの実行フローに関するものです。次の一連の動作は正しいですか?
networkFetcher
完了ハンドラを実行します- ブロックが実行されます
- ブロックはへの参照を解放します
networkFetcher
networkFetcher
ブロックへの参照を解放する
私の疑問は、アクション 3) と 4) に依存しています。3) が 4) の前に実行された場合、誰も参照を持っていないnetworkFetcher
ため、いつでも解放できます (ARC は の最後に解放呼び出しを配置しますdownloadData
)。私は間違っていますか、それとも何か不足していますか?
質問が明確であることを願っています。
ios - スーパービューから削除した後も uiviewcontroller が保持されますが、保持サイクルの問題ですか?
ボタンを長押しすると、UIViewController(AddProduct) を含む UIPopover が開きます。ボタンを長押しすると、製品の追加には、ユーザーを ABCViewControl に戻すキャンセル ボタンが含まれます。 .この時点までは問題ありません。このようなもの..
}
AddProduct には、別の uiviewcontroller(AddProductSeparateViewController) を開く編集ボタンが含まれています。それ (AddProduct) にはキャンセル ボタンも含まれています。キャンセル ボタンをクリックすると、ユーザーは ABCViewCintroller に戻ります。
**問題:** AddProduct はこのプロセスで解放されますが、AddProductSeparateViewController は、割り当てツールのライブ オブジェクトと dealloc ブレークポイントに従って解放されません。
AddProductSeparateViewController を開くための AddProduct のコードは次のとおりです。
}
このデリゲートは基本的に、AddProductSeparateViewController を開くように ABCViewController に通知します。
}
}
キャンセルする AddProductSeparateViewController のコードは次のとおりです。
}
このプロセスで AddProductSeparateViewController がリリースされないのはなぜですか。
ありがとう
ios - weakSelf によって呼び出されたメソッド内から weakSelf を参照すると、リテイン サイクルが発生しますか?
単純な保持サイクルがどのように作成されるかは理解していると思いますが、より複雑な状況を完全には理解していません。
リテイン サイクルを引き起こすコードを次に示します。(右?)
その保持サイクルを回避するために、次への弱い参照を作成しますself
。
これまでのところ、私が正しいことを願っています。
ここが興味深いところです。テキストの高さを計算してキャッシュし、tableView で reloadData を呼び出すメソッドがあります。そのメソッドは非同期的に実行され、終了時にその completionBlock (mainThread 上) を呼び出します。
welf
このコードは、 の completionBlock で自分自身をキャプチャするため、保持サイクルを引き起こしrelayoutWithCompletion:
ますか? welf は弱い参照であるため、保持サイクルを回避すると考えるのは正しいですか?
もう一歩踏み込んだら?
それはずっとウェルフです...
ios - デリゲートで _weak 参照を使用することが推奨される理由
こんにちは、誰かがデリゲートに強い参照ではなく _weak 参照を使用することをお勧めする理由を詳しく説明してくれますか? ただし、デリゲートに強い参照を使用することもできます。どの状況で強い参照を使用する必要があり、どの状況でデリゲートに _weak 参照を使用する必要があるかを簡単な方法で説明する、より適切でわかりやすい例を教えてください。
スタックオーバーフローに関する関連する質問の1つを調べました
しかし、それは私の概念を適切にクリアしませんでした。
どんな助けでも大歓迎です!!
ありがとう。