9

これは「ベスト プラクティス」の質問ですが、オンラインで適切な回答を見つけることができないようです。私はコードの静的ライブラリを作成しています。これは、とりわけ進行状況のフィードバックのためのいくつかのデリゲート メソッドを提供します。

ライブラリは独自のキューを管理するため、ダウンロードなどは明らかにメインスレッドでは行われませんが、私の質問は、デリゲートメソッドが常にメインスレッドで呼び出されるようにする必要があるか、キューに入れられたスレッドからそれらを呼び出すことを受け入れられるかどうかです。使用していますか?デリゲート メソッドで UI の更新を行いたい場合、ライブラリを使用している開発者がメイン スレッドにいることを確認することに依存しますか?

乾杯、サム

4

3 に答える 3

0

独自のダウンロード マネージャーを作成したとき、接続オブジェクト インスタンスを実行しているセカンダリ スレッドでデリゲート メソッドの呼び出しを続けましたが、それは、メイン スレッドで成功ブロックをディスパッチする「コントローラー」があったためです。私の意見では、ライブラリがどのレベルで関与しているかによって異なります。ほとんどの場合、デリゲートが UIKit オブジェクトを含むサブルーチンを含むメソッドを呼び出すと思われる場合、これらはスレッドセーフではないため、メイン スレッドでディスパッチすることを選択します。デリゲートの後、ライブラリのユーザーがデータについてさらに詳しく説明できると思われる場合は、別のスレッドにとどまることを選択しますが、ドキュメントで明確に述べます。別のポイントがあります。速度。3 つの優先度によっては、セカンダリ スレッドが非常に遅くなる可能性があります。
[編集]
WWDC ビデオで Apple エンジニアの Quinn が述べているように、ダウンロード マネージャーでは KVO または通知が接続を処理するためのより良い方法です。

于 2013-07-05T11:10:31.080 に答える
-2

明らかに、メインスレッドでデリゲートメソッドを呼び出す必要があります。私が間違っていなければ、デリゲートメソッドはデリゲートオブジェクト(ユーザーのクラス)に渡されるからです。

queue にデータをダウンロードしているとします。データがダウンロードされると、ユーザーのクラスの特定のオブジェクトに渡してデリゲート メソッドを呼び出すため、メイン スレッドにある必要があります。

于 2013-07-05T10:49:38.880 に答える