ios - 多播代理和通知的优缺点
大家讲道理
大家讲道理 2017-04-18 09:24:50
0
1
484

为什么我们使用多播代理而不使用通知呢?
多播代理的具体应用场景有哪些?
求大神指导

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全員に返信(1)
左手右手慢动作

良い質問です。
1. 私が学んだ説明は、通知が干渉を引き起こすというものです。たとえば、A、B、C の 3 枚の写真をダウンロードしたい場合、A のダウンロードが完了すると、通知が送信され、写真が保存される場所が表示されます。 B と C も通知を受信するのを待っていますが、その必要はありません。

この問題は、各タスクに対応する識別子を追加するだけで解決できると思います。たとえば、上記の画像をダウンロードする場合、通知名は "loadImage_" + URL の最後のセクションに設定されます。そして、通知は送信者を指定できます

リーリー

2.カジュアルに使えると思います。プロキシを使用することにはいくつかの利点があります。デリゲートのメソッド名がすでに定義されており、インターフェイス定義が明確で、どのパラメータを渡すべきかがわかっているため、共同開発やホイール構築に適しています。通常、通知は userinfo に依存してパラメータを渡します。これは、内部のデータ構造が不明であり、あまり明確ではありません。

3. 実際には、ブロックまたはクロージャーを使用するのが最善だと思います。

  • 複数のデリゲートを配列に追加する必要があるため、強参照が発生し、循環参照の問題が発生する可能性があります。

  • ブロックの方が書くのが楽しいと思います。

  • などのコールバックコードをその隣に書くことができます。
リーリー

デリゲートに関しては、特にいくつかのパラメーターを渡す必要がある場合は、別のメソッドを作成する必要があります。デリゲートを使用する場合は、それらの一時変数ページをメンバー変数に変換する必要があります。そうしないと、メソッド間で使用できません。

  • 最後のブロックには優れた分離特性があります。
    たとえば、単一のインスタンスを使用して、すべてのイメージのダウンロードを管理します (その名前がloadManagerであると仮定します)。複数のデリゲートを使用する場合でも、すべてのダウンロード タスクが 1 つのもの (loadManager) に送られるため、異なるダウンロード タスクを区別する必要があります。委任リストにはさまざまなダウンロード タスクの委任が含まれていますが、これらを区別する必要があります。ただし、ブロックを使用すると、説明はさらに複雑になります。つまり、ブロックが最初からネストされ、分離されます。これは、SDWebImage のコードを見れば明らかです。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート