Нужно ли удалять наблюдателя вручную, если я хочу, чтобы он был там в течение всего времени жизни приложения?
Мой 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];
}
надеюсь, это поможет вам.