Notification - Swift 3.0

1880 ワード

What?
1つのものを使用する前に、まずそれが何なのか、何をしているのかを理解しなければなりません.通知:
NSNotification objects encapsulate information so that it can be broadcast to other objects by an NSNotificationCenter object.
          ,                
 An NSNotification object (referred to as a notification) contains a name, an object, and an optional dictionary. 
    :     ,    ,           
The name is a tag identifying the notification.
①    :           .
The object is any object that the poster of the notification wants to send to observers of that notification (typically, it is the object that posted the notification).
②    :      poster              ,
The dictionary stores other related objects, if any. NSNotification objects are immutable objects.
③         .         .

通知は、メッセージ通知機構a mechanism for broadcasting information within a programが通知を使用する場合、モジュール間のデカップリングのためによく用いられる.一般的に、モジュールの関連性が強い場合、可読性が悪くなり、デバッグが困難になるため、通知の使用は推奨されない.
Bugs
Add & Remove
通知を使用する際の注意点の1つは、通知を追加した観察者が、その通知に対する観察者を適切なタイミングで除去することである.
NSNotification : A 
ObservorO : B
NSNotificationCenter : C

通知センタCのように観察通知Aの観察者Bが登録されている場合、通知センタは、観察者Bのメモリアドレスを記録するのが一般的である.観察者が破棄された場合、その観察者を除去しない場合、通知Aが送信されると、通知センタはdispatch tableを照会し、記録したBのメモリアドレスに基づいてこの通知Aを送信すると、古典的な野ポインタエラーとなる.
提案:あなたの使用ロジックに基づいて通知を追加して削除したほうがいいです.
  • 観察者のライフサイクル全体にわたって通知の送受信を行う場合は、その観察者を作成することをお勧めします.
  • ビュー表示時に通知ロジックを処理し、ビューが消えたときに処理しないことを望む場合は、addremoveviewWillAppearaddObserverviewWillDisappearでよい.ペアで現れることを覚えておいてください.
  • 通知の同期処理メカニズム
    これは、通知を送信して観察し、通知を同じスレッドとして処理することを意味し、通知の送信中に、通知センターは関連するObserverのselectorが1つずつ実行され、すべての実行が完了すると、通知が送信されます.注意点:観察者がUIイベントを処理するにはメインスレッドに戻り、送信通知所のコードは観察者がタスクを処理するまでブロックされる.
    リファレンス
    nsnotificationピット回避ガイドiOS NSNotificationCenter使用姿勢の詳細