Я обычно использую NSNotification, как в примере ниже:
In viewDidLoad:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(foo:) name:kName1 object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(bar:) name:kName2 object:nil];
In 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). Это следует за предложением моих друзей.
Я хочу знать, прав мой друг или нет? На мой взгляд, поскольку текущий экземпляр будет выгружен или освобожден, уведомление суперкласса также бесполезно. И есть ли какое-либо системное уведомление об использовании подкласса UIViewController?