Я обычно использую NSNotification как образец ниже:Какой лучший способ, чтобы удалить уведомления наблюдатель
В viewDidLoad:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(foo:) name:kName1 object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(bar:) name:kName2 object:nil];
В viewDidUnload и dealloc:
[[NSNotificationCenter defaultCenter] removeObserver:self];
Но другу сказал, что я не должен использовать [[NSNotificationCenter defaultCenter] removeObserver:self];
, потому что он удалит всех наблюдателей, включая суперкласс. Он предложил мне использовать следующий код для удаления наблюдателя один за другим.
[[NSNotificationCenter defaultCenter] removeObserver:self name:kName1 object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:kName2 object:nil];
Я проверил код библиотеки ASIHttpRequest в (https://github.com/pokeb/asi-http-request). Это следует за предложением моих друзей.
Я хочу знать, прав ли мой друг или нет? На мой взгляд, поскольку текущий экземпляр будет выгружен или dealloc, уведомление суперкласса также бесполезно. И есть ли уведомление об использовании подкласса системы UIViewController?
Что это значит, что он удалит «суперклассного наблюдателя»? Наблюдатель - это экземпляр объекта, а не класс. Если он будет освобожден, он должен отменить регистрацию всех уведомлений, даже если они были зарегистрированы в коде суперкласса. – MrTJ
@MrTJ Я имею в виду наблюдателя уведомлений, который добавляется в методе супер. Возможно, отцу экземпляра класса также понадобятся некоторые уведомления при вызове метода viewDidUnload. – tangqiaoboy
Возможно, возможно.Если вы хотите отменить регистрацию в viewDidUnload, тогда для обеспечения безопасности я также предлагаю использовать второй метод (при регистрации пользователя без регистрации) – MrTJ