2012-05-05 1 views
1

Is является стандартным для балансировки 'addObserver' с:Стандартная практика NSNotificationCenter?

[[NSNotificationCenter defaultCenter] removeObserver:self] 

в методе viewWillDisappear?

Например, при регистрации для получения результатов событий NSURLConnection классом Data Manager, инициированным различными вкладками TabBar (отдельные контроллеры). Каждый контроллер регистрируется как «уведомленный» о получении результатов в viewDidLoad. Должны ли каждый контроллер также отменить регистрацию? Кажется, что если имя: уведомления одинаково для всех, это может привести к катастрофе, если снова появится представление табуляции?

ответ

4

Каждый addObserver должен иметь удаленный наблюдатель. Вы должны быть очень осторожны, чтобы не добавлять AddBServers, когда наблюдатель уже добавлен, например, в viewDidAppear наблюдатели могут быть добавлены много раз, а затем ваш наблюдательный селектор будет вызван много раз.

Честно говоря, из примера, который вы объясняете, следует рассмотреть протокол делегата. См. Здесь:

http://mobiledevelopertips.com/objective-c/the-basics-of-protocols-and-delegates.html

+0

Inturbidus, рассмотрит протокол делегата. Вы ответили на вопрос и многое другое! – David

+0

Если вы придерживаетесь центра уведомлений, следует ли вместо этого «зарегистрироваться» вместо «viewWillAppear»? Я замечаю, что он вызывается при возврате на вкладку. – David

+1

viewWillAppear запускается каждый раз, когда отображается представление. viewDidLoad, вероятно, более уместен, поскольку он запускается только один раз, когда вызывается initWithNibName или init. –