objective-c - NSNotificationはスーパークラスで監視され、スーパークラスと子クラスで処理されます

objective-c ios inheritance nsnotifications deterministic

NSNotificationを監視するクラスParentClassがあります。 ParentClassが通知を処理します。 ChildClassはParentClassを継承し、通知も処理します。通知が配信される順序は確定的ですか?

つまり、ParentClassは常にChildClassの前に通知を処理しますか?
答え
これは、インスタンス化されるクラスと、実際のオブジェクトを形成する方法によって異なります。また、サブクラスが処理のためにスーパーを呼び出すかどうかにも依存します。それ以外の場合、NSNotificationCenterのドキュメントにあるように、通知を受け取るオブジェクトの順序はランダムであり、サブクラスまたはスーパークラスであるかどうかには依存しません。理解を深めるために、次のサンプルを検討してください(説明が完全に明確ではないため、いくつかの例が必要です)。

例1:2つの異なるオブジェクト

ParentClass *obj1 = [[ParentClass alloc] init];
ChildClass *obj2 = [[ChildClass alloc] init];
// register both of them as listeners for NSNotificationCenter
// ...
// and now their order of receiving the notifications is non-deterministic, as they're two different instances


例2:サブクラスがスーパーを呼び出す

@implementation ParentClass

- (void) handleNotification:(NSNotification *)not
{
    // handle notification
}

@end

@ipmlementation ChildClass

- (void) handleNotification:(NSNotification *)not
{
    // call super
    [super handleNotification:not];
    // actually handle notification
    // now the parent class' method will be called FIRST, as there's one actual instace, and ChildClass first passes the method onto ParentClass
}

@end
関連記事

iphone - ビューとWebサービスの同期呼び出しの読み込みに関する問題

objective-c - 人間の読み取り可能なデバイスタイプをIOBluetoothDeviceから取得する

c# - C#クラスをObjective-Cクラスにマップしますか?

iphone - プログラムでスイッチをscrollviewに追加すると例外がスローされる

iphone - iPhoneのキーボードボタンを複製しようとしています

objective-c - CCLayerによるcocos2dモーダルウィンドウ

objective-c - このデータは安全に送信されていますか?

objective-c - 8192x8192 UIViewラグ

c++ - グロール通知-フレームワークを使用して通知を起動しません(ミスト)

objective-c - コマンド/ usr / bin / codesignが終了コード1で失敗しました:i386:そのようなファイルまたはディレクトリはありません