My NSNotification Observer предназначен не только для определенного контроллера вида или просмотра. Я хочу, чтобы он удалялся только тогда, когда пользователи закрывали приложение. Я добавил «добавить наблюдателя» в AppDelegate. Должен ли я все же удалить его вручную, или автоматически удаляется, когда приложение закрыто?Нужно ли удалять наблюдателя вручную, если я хочу, чтобы он был там в течение всего срока службы приложения?
ответ
Если вы хотите получать уведомления для определенного контроллера вида, пожалуйста, добавьте add observer
к этим конкретным классам и remove observer
в viewDidDisappear
. Эй видел ваш случай, прямо сейчас вы добавили add observer
в app delegate
, тогда вы можете удалить его ниже, в соответствии с вашими требованиями.
- (void)applicationWillResignActive:(UIApplication *)application
- (void)applicationDidEnterBackground:(UIApplication *)application
- (void)applicationWillTerminate:(UIApplication *)application
Когда приложение прекращает то вызов метода т.е.
- (void)applicationWillTerminate:(UIApplication *)application
{
// Called when the application is about to terminate. Save data if appropriate.
}
вы можете удалить наблюдателя:
или кал удалить наблюдателя здесь:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
}
Когда приложение приходят задний план.
Я думаю, вы должны написать свой код в
deinit{
//remove observer here
}
Добавить выше метода в классе AppDelegate.
Надеюсь, это вам поможет. Благодаря
Попробуйте
вы должны addobserver в 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];
}
надеюсь, что это вам поможет.
Вы добавляете наблюдателя в 'didFinishLaunchingWithOptions'? – Vvk
@Vvk Да, я добавил его там – den330
вам нужно удалить наблюдателя в 'applicationWillTerminate' метод в AppDelegate – Vvk