問題タブ [capture-list]

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 に答える
5572 参照

swift - ネストされた関数内で自己キャプチャされている

クロージャーを使用すると、通常[weak self]、キャプチャ リストに追加してから、自分自身に対して null チェックを行います。

クロージャーの代わりにネストされた関数を使用している場合にnull チェックを実行するにはどうselfすればよいですか (または、チェックが必要なのか... または、このようなネストされた関数を使用することをお勧めします) ie

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

methods - メソッドのクロージャーから強い参照サイクルを削除するには?

ここに、閉鎖の強い参照サイクルの例をいくつか示します。格納されたプロパティにクロージャーを割り当てると、クロージャー キャプチャ リストを使用して、キャプチャされた参照を非所有/弱にすることができます。しかし、格納されたプロパティ クロージャにメソッドを割り当てたり、外部スコープのクロージャにメソッドを割り当てたりすると、キャプチャ リストを使用できません。

最後の 2 つのケースで参照サイクルを削除するにはどうすればよいですか?

クロージャのみのキャプチャ リストで強い参照サイクルを作成して回避する例

メソッドからのクロージャーで強い参照サイクルを作成する例

メソッドからクロージャをexternから設定して強参照サイクルを作成する例

出力

「自己への強い参照による閉鎖」をテストします。

プロパティ「ClosureClass のデフォルト値」を持つオブジェクトが初期化解除されています

「メソッド intern でクロージャを設定」をテストします。

「extern メソッドでクロージャを設定」をテストします。

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

swift - Swift XCTest: 弱い変数の適切な割り当て解除を検証する

最近、単体テストを使用して、作成したオブジェクトが適切に割り当て解除されることを確認しようとしていました。ただし、何を試しても、テストが完了する前にオブジェクトの割り当てが解除されないことがわかりました。そこで、弱い変数を使用してオブジェクトの割り当て解除の基本を証明しようとする単純な例 (以下を参照) にテストを縮小しました。

私の考えでは、テストメソッドが終了した後、強参照はオブジェクトの保持を停止する必要があり、弱参照は次の実行ループで参照されるときに nil にする必要があります。ただし、弱参照が nil になることはなく、両方のテストが失敗します。ここで何か誤解していますか?以下は完全な単体テストです。

何らかの理由で XCTest によって割り当て解除が延期されているのではないかと考えましたが、テスト メソッド本体を でラップしてもautoreleasepool、オブジェクトの割り当て解除は発生しませんでした。

0 投票する
0 に答える
497 参照

swift - How can I find all closures?

We've totally forgotten to capture self and its properties when referencing it within a closure. (Note: the compiler didn't warn us.) Now our application is full with strong reference cycles. To fix them, we have to add the capture list to each closure one-by-one.

How can we find them all? I thought to search for in but it results in too much results including comments, for cycles.

Good old Objective C would help me searching for ^. And it would warn us...

0 投票する
3 に答える
423 参照

swift - Swift - キャプチャ リストの自己明確化

Apple のいくつかの記事と開発者ガイドを読んだ後でも、キャプチャ リストの閉鎖についてまだ混乱しています。「捕獲」とはどういう意味ですか、所有されていない自己と弱い自己に関して、舞台裏でどのように機能しますか? オブジェクトを所有せずにクロージャーがどのように自己を使用するのですか? そのオブジェクトのコピーを作成するようなものだと思ったので、終了すると値型のようにスタックから渡されますが、間違っていると思います。ここの誰かが理解をより簡単かつ明確にするか、この特定の質問に答える良い記事にリンクしてくれることを願っています. 前もってありがとう