Я обычно использую 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?