問題タブ [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 - 引数付きの Swift ブロックで弱い自己を正しく処理する方法
私TextViewTableViewCell
の には、ブロックを追跡するための変数と、ブロックが渡されて割り当てられる configure メソッドがあります。
これが私のTextViewTableViewCell
クラスです:
私のcellForRowAtIndexPath
メソッドでconfigureメソッドを使用する場合、渡すブロックでweak selfを適切に使用するにはどうすればよいですか。weak self
がない場合は次のとおりです。
更新:次を使用して動作するようになりました[weak self]
:
[unowned self]
代わりにステートメント[weak self]
を取り出すとif
、アプリがクラッシュします。これがどのように機能するかについてのアイデアはあり[unowned self]
ますか?
objective-c - Objective-C の weakself 宣言
2014 WWDC セッション「コレクション ビューを使用した高度なユーザー インターフェイス」の Apple サンプル コードを調べていたところ、次のようなweakself 宣言に出くわしました。
私の質問は次のとおりです: &*は宣言で何を意味しますか? なぜ持っていないのですか:
ご協力いただきありがとうございます。
ios - これにより、ブロック保持サイクルがどのように防止されますか?
ここでブロック保持サイクルを防ぐための解決策を見ました
しかし、なぜ、またはどのように機能するのかについて頭を悩ますのに苦労しています。
この例では、弱い自己参照が作成され、実行されます。これがどのようにサイクルを壊すかがわかります。ただし、ブロック内で強い参照が作成されます。これは、最初に防止しようとしていたリテイン サイクルを再現するのではないでしょうか?
たとえば、self が 0x123 の場合、weakself も 0x123 を指しています。次に、strongSelf はブロック内で 0x123 に設定されます。
これは保持サイクルになりませんか? (self は block への強い参照を持ち、strongSelf は self への強い参照を持ちます)
arrays - Swift で Dictionary から値またはキーを取得するときにサイクルを保持する
ディクショナリから値を取得して配列に入れると、メモリを解放できなくなります。Array と Dictionary からすべてのオブジェクトを削除しようとしましたが、これらのオブジェクトはまだどこかに存在しています (deinit が呼び出されていません)。
以下の方法で遊んでいました。
値を抽出するためにこれら 2 行を削除すると、Deinit が正常に呼び出されます。
ここで何が間違っていますか?
オブジェクトが不要になったときにメモリを解放するために、オブジェクトを適切な方法で削除するにはどうすればよいですか? この問題は、ディクショナリ (Dictionary.values または Dictionary.keys) からキーまたは値が抽出された場合にのみ発生します。
編集:
この場合の回避策を作成しました。Dictionary の代わりに NSDictionary を使用し、最初にキーを抽出してから for ループで値を取得すると、機能します。
しかし、allKeys の代わりに allValues を使用すると、機能しなくなります。
swift - Swift でクロージャへの弱参照を作成できません
更新:弱くせずに書いてみましたが、漏れはないようです。そのため、その質問は不要になったのかもしれません。
Objective-C ARC では、クロージャーをクロージャーの内部で使用できるようにする場合、ブロックはそれ自体への強い参照をキャプチャできません。または保持サイクルになるため、代わりにクロージャー キャプチャを次のように、それ自体への弱参照。
これをSwiftに翻訳しようとしました:
ただし、Swift コンパイラでは、関数を弱くキャプチャすることを宣言できません ( 'weak' cannot be applied to non-class type 'Int -> Int'
)。[unowned fib]
も機能しません ( 'unowned' cannot be applied to non-class type '(Int -> Int)?'
)。
関数は Swift のクラス型ではないことを知っています。ただし、それらは参照型であり、参照カウントに参加します。したがって、それらを弱い参照または所有されていない参照にする方法はありませんか?
Swift で保持サイクルを持たない再帰的クロージャーをどのように記述しますか?
ios - これにより保持サイクルが発生しますか
xCode 5.1、iOS 7.1、ARC これにより、トピックの保持サイクルが発生しますか? event=nil
設定するとツリー全体の割り当てが解除されるため、トピックも割り当て解除されるため、そうは思いませんが、よくわかりません。
swift - 所有されていない対弱い。なぜ所有されていない方がよいのでしょうか。
Apple が「The Swift Programming Language」で述べたように、可能な限りunowned
以下を優先する必要があるようです。weak
キャプチャされた参照が決して nil にならない場合は、弱い参照ではなく、所有されていない参照として常にキャプチャする必要があります。
このページの「弱い参照と所有されていない参照」セクションから
この2つの違いがよくわかりました。unowned
しかし、よりも好む正当な理由はあります weak
か?weak
の方がはるかに安全だと思い[weak obj]
ますobj
.
パフォーマンスに関する考慮事項または見逃したものに関連していますか? それとも、常にweak
代わりに使用してもまったく問題unowned
ありませんか?
ios - これらのどれが保持サイクルを引き起こしますか? (obj-c、サンプルコード)
ブロックを使用するときの保持サイクルのこつをまだ取得しようとしています。私の質問は..次のうち、保持サイクルを引き起こすのはどれですか?
1
2
3
4
ありがとう!
ios - 弱い/強いARCセマンティクスを使用する場合でもサイクルを保持
「私は ARC の専門家ではないことを認め、サイクルを保持していますが、いくつかの研究といくつかの優れた記事 (このようなもの) を通じて、基本を理解したと信じています.
しかし、私は現在困惑しています。次のように定義されたプロパティがあります。
私の中でinit
、私は次のことを行います。
そして、ここに私のdeallocがあります
dispatch_aync
ブロックがコメントアウトされている場合、dealloc
foo が に設定された直後に Foo が呼び出されることがわかりnil
ます。ブロックがコメントインされているため、foodelloc
は呼び出されません。
リテインサイクルは正しいですか?方法はありますか?