4

私は次のようにスーパークラス(UIViewController)で通知を受けるために登録します:

SuperClass.m

- (void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(notification:)
                                                 name:@"Notification"
                                               object:nil];
}

- (void)notification:(NSNotification *)notification {

    // Do something for SuperClass with the notification
}

現在、サブクラス(SuperClass.mのサブクラス)では、次のように同じ通知をリッスンします。

SubClass.m

- (void)notification:(NSNotification *)notification {

    // Do something specific for SubClass with the notification
}

これは、スーパークラスの通知に基づいて動作するときに一般的な動作を行い、サブクラスの通知に基づいて動作するときに、より具体的な動作を行うための許容可能な(コード単位の)方法ですか?

4

1 に答える 1

2

通常、スーパークラスでの一般的な動作を維持しながら、サブクラスでより具体的な動作を許可する場合は、サブクラス呼び出しがありますsuper。たとえば、-[UIViewController viewDidAppear:]ドキュメントには次のように書かれています。

このメソッドをオーバーライドして、ビューの表示に関連する追加のタスクを実行できます。このメソッドをオーバーライドする場合superは、実装のある時点で呼び出す必要があります。

NSNotificationしたがって、通知の設定は問題ありません(ただし、オーバーライドされると予想されるメソッドのパラメーターとしてオブジェクトを使用するのは少し奇妙ですが)。ただし[super notification:notification]、スーパークラスの動作も取得するために呼び出す必要があります。

于 2012-12-20T03:41:16.963 に答える