Нужно ли удалять наблюдателя вручную, если я хочу, чтобы он был там в течение всего времени жизни приложения?

Мой NSNotification Observer предназначен не только для определенного представления или контроллера представления. Я хочу, чтобы он был удален только тогда, когда пользователи закрывают приложение. Я добавил "добавить наблюдателя" в AppDelegate. Нужно ли мне удалять его вручную в deinit или он автоматически удаляется при закрытии приложения?

4 ответа

Решение

Если вы хотите уведомление для определенного контроллера представления, пожалуйста, добавьте add observer к этим конкретным классам и remove observer в viewDidDisappear, Ae видел ваше дело, сейчас вы добавили add observer в app delegate, затем вы можете удалить его следующими способами в соответствии с вашими требованиями.

- (void)applicationWillResignActive:(UIApplication *)application 
- (void)applicationDidEnterBackground:(UIApplication *)application
- (void)applicationWillTerminate:(UIApplication *)application

Я думаю, вы должны написать свой код в

 deinit{
   //remove observer here
}

Добавьте вышеуказанный метод в класс Appdelegate.

Надеюсь, что это поможет вам. Спасибо

Когда приложение завершается, вызывается метод, т.е.

- (void)applicationWillTerminate:(UIApplication *)application
{
    // Called when the application is about to terminate. Save data if appropriate. 
}

Вы можете удалить наблюдателя:

или вы можете удалить наблюдателя здесь:

- (void)applicationDidEnterBackground:(UIApplication *)application
{

}

Когда приложение приходит в фоновом режиме.

Попробуй это

Вы должны добавить сервер в didFinishLaunchingWithOptions

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(<#your selector#>)
                                                 name:@"TestNotification"
                                               object:nil];

    return YES;
}

затем удалите наблюдателя в applicationWillTerminate, вам не нужно удалять наблюдателя другими методами, потому что приложение часто работает в фоновом режиме и не вызывает didFinishLaunchingWithOptions все время. так что вы должны удалить в applicationWillTerminate только.

- (void)applicationWillTerminate:(UIApplication *)application {
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.

    // If you don't remove yourself as an observer, the Notification Center
    // will continue to try and send notification objects to the deallocated
    // object.
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

надеюсь, это поможет вам.

Другие вопросы по тегам