Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在Objective-C中删除NSNotificationCenter观察员的位置_Ios_Objective C_Nsnotificationcenter - Fatal编程技术网

Ios 在Objective-C中删除NSNotificationCenter观察员的位置

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

我不想在ViewDidDisplay中添加观察者,并在ViewDidEnglishe中删除。这不适用于我的情况

我试过在Dealoc做这件事

我的根VC在navController中。然后在navController中推送第二个VC,在那里我添加了Observer,以便从根VC发送通知。问题是,当我弹出第二个VC时,它的dealloc没有立即调用,有时可能没有一起调用

- (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中。