Ios 如何防止弹出UIViewController后调用Notification observer?
我有2个Ios 如何防止弹出UIViewController后调用Notification observer?,ios,objective-c,memory-management,notifications,Ios,Objective C,Memory Management,Notifications,我有2个UIViewControllerA和B。从A开始,IpushB和B有2个观察者用于可达性。现在,当我弹出B,然后到达A,如果网络关闭,则调用用VC编写的方法B。我无法理解,如果B已经从导航堆栈中弹出,那么它的方法是如何调用的 注意- 我在VC A中没有VC B的任何属性。我总是 每当从VC a推送时,都会创建一个新的VC B实例 我也知道我可以删除视图中的观察者,但我仍然想删除 知道为什么在VC B弹出后仍调用observer 如果您使用在视图中打开的标志将出现,而在视图中关闭的标志将消
UIViewController
A和B。从A开始,Ipush
B和B有2个观察者
用于可达性
。现在,当我弹出B,然后到达A,如果网络关闭,则调用用VC编写的方法B。我无法理解,如果B已经从导航堆栈中弹出,那么它的方法是如何调用的
注意-
我在VC A中没有VC B的任何属性。我总是
每当从VC a推送时,都会创建一个新的VC B实例
我也知道我可以删除视图中的观察者,但我仍然想删除
知道为什么在VC B弹出后仍调用observer
如果您使用在视图中打开的标志将出现,而在视图中关闭的标志将消失
,以及在其他相关位置,例如在中从父视图控制器移动
或根据您的呈现方式应用的标志,情况如何。然后,您可以在观察者触发时标记您的操作。这是一个提纲
@interface ViewController ()
@property (nonatomic) BOOL flag;
@end
@implementation ViewController
// Action triggered by observer
- ( void ) someAction
{
if ( self.flag )
{
// do it
}
}
// Switch on
- ( void ) viewWillAppear:( BOOL ) animated
{
[super viewWillAppear:animated];
self.flag = YES;
}
// Switch off
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
self.flag = NO;
}
@end
这很简单。它很容易维护和调试,如果您需要在某个阶段基于其他原因打开或关闭操作,它也很容易适应
PS:你真的需要展示一些代码。。。如果您不提供任何代码,就很难给出更具体的答案。这是否有帮助?目前我已经在使用“isMovingFromParentViewController”标志检查来删除观察者,但我的问题仍然没有解决。为什么在弹出viewcontroller之后还要调用观察者?当VC弹出时,你不应该再在任何地方对它有强烈的引用。问题可能存在,但在这种情况下,即使您有一个强引用,在删除观察器后,也不应该再次调用它,因此某些地方不正确。也许您没有正确地移除它?显示一些代码?我现在已经删除了视图中的观察者,它将在isMovingFromParentViewController标志条件中消失,并且它正在工作。谢谢你的帮助好的!!!回答这个问题——VC被弹出后,如果你在某个地方对它有强烈的引用,它会一直存在,直到引用超出范围。根据您创建和使用它的方式,很容易有一个强引用存在超过需要的时间。但我不认为这是正在发生的事情,当你导航时会有一些清理工作发生,所以VC会一直呆在那里,直到所有的UI工作完成,所以这样的事情很容易发生。所以防止它的好方法是使用标志,或者在您不想再对它做出反应时将其删除。