addObserver
をviewDidLoad:
に、removeObserver
をdealloc:
に使用しました。コード:NSNotificationCenterを使ってaddObserver/removeObserverを追加するより良い方法はありますか?
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(refreshData)
name:AnyNotification
object:nil];
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self
name:AnyNotification
object:nil];
}
しかし、いくつかの記事によると、それがviewDidDisappear:
にviewDidAppear:
とremoveObserver
にaddObserver
すると良いでしょう、と述べました。コード:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(refreshData)
name:AnyNotification
object:nil];
}
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:AnyNotification
object:nil];
}
これで、addObserver/removeObserverはどのような方法で追加できますか?
メモリ警告が発生する可能性がある場合は、オブザーバを 'dealloc'で削除するのは良いことではありません。 – Eimantas
ビューが消えてしまったので、removeObserverではなく、それぞれの特定の通知に対してオブザーバを削除してください:自分自身を削除するか、ビューが再表示されたときにスーパークラスの通知オブザーバを削除します。 – chourobin