Ios 在Objective-C中删除NSNotificationCenter观察员的位置
我不想在ViewDidDisplay中添加观察者,并在ViewDidEnglishe中删除。这不适用于我的情况 我试过在Dealoc做这件事 我的根VC在navController中。然后在navController中推送第二个VC,在那里我添加了Observer,以便从根VC发送通知。问题是,当我弹出第二个VC时,它的dealloc没有立即调用,有时可能没有一起调用Ios 在Objective-C中删除NSNotificationCenter观察员的位置,ios,objective-c,nsnotificationcenter,Ios,Objective C,Nsnotificationcenter,我不想在ViewDidDisplay中添加观察者,并在ViewDidEnglishe中删除。这不适用于我的情况 我试过在Dealoc做这件事 我的根VC在navController中。然后在navController中推送第二个VC,在那里我添加了Observer,以便从根VC发送通知。问题是,当我弹出第二个VC时,它的dealloc没有立即调用,有时可能没有一起调用 - (void)viewDidLoad { [super viewDidLoad]; [[NSNotificat
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(newMessagesNotification:) name:_newMessageNotificationListenerName object:nil];
}
- (void)newMessagesNotification:(NSNotification *)notification {
//some implementation
}
如果您不想在ViewDiDisaper中删除,我认为您应该在调用navigationCotnroller弹出方法后立即删除它。但我认为我们无法告诉您应该在什么时候删除,因为我们不知道您何时要删除它,以及为什么它在ViewWildisaper或ViewDiDisaper中不好。为什么不
ViewDidEnglish
?如果未调用dealloc
,则某些内容包含对视图控制器的引用。不在ViewDidDemouse中,因为我在secondVC中带了另一个VC。有人可能会争论是否在ViewDidDemouse中设置If条件。但我正在寻找苹果建议的具体方法,以删除VCDealloc中的observer。你需要弄清楚什么是引用,如果我的第二个VC在modally中呈现,而我驳回了它,你会怎么做(我100%确定在驳回modally时没有调用dealloc)。然后你会怎么做。苹果建议的方法是在viewDidLoad/中注册,需要观察时在dealloc上注销。如果在模态消失时未调用dealloc,则可能有一个引用循环,或者某个对象持有对模态的强引用。首先解决这个问题,然后放入dealloc。我正在从其他控制器调用popToRootVc。因此,我对dealloc方法更感兴趣。我想在从导航堆栈中删除secondVC后立即调用它。请阅读我的评论,了解为什么不在ViewWillEnglish中。