1

我能够注册 UIApplicationDidBecomeActiveNotification 并正确接收事件。但有时我会在应用程序仍在运行时收到这些通知。我怀疑内存问题会触发应用程序辞职/恢复,但无法确认是这种情况(我曾同时看到内存警告)。为什么在应用程序运行时会调用这些方法(没有调用、没有锁定等)?

我正在注册这些通知:

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appDidBecomeActiveNotif:) name:UIApplicationDidBecomeActiveNotification object:nil];
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillResignActiveNotif:) name:UIApplicationWillResignActiveNotification object:nil];

(这在使用 dispatch_once 的单例构造函数中完成一次)

对应的功能:

-(void)appDidBecomeActiveNotif:(NSNotification*)notif
{
  NSLog(@"appDidBecomeActiveNotif called");
}

-(void)appWillResignActiveNotif:(NSNotification*)notif
{   
  NSLog(@"appWillResignActiveNotif called");
}

以下是一些日志:

2013-04-11 09:28:11.401 App[1499:907] appWillResignActiveNotif
2013-04-11 09:28:13.505 App[1499:907] appDidBecomeActiveNotif
4

1 回答 1

1

这就是文档对这些通知的描述:

UIApplicationDidBecomeActiveNotification 当应用程序激活时发布。应用程序在接收事件时处于活动状态。一个活跃的应用程序可以说是有焦点的。它在启动后获得焦点,在弹出覆盖窗口或设备锁定时失去焦点,并在设备解锁时获得焦点。

UIApplicationWillResignActiveNotification 当应用程序不再处于活动状态并失去焦点时发布。应用程序在接收事件时处于活动状态。一个活跃的应用程序可以说是有焦点的。它在启动后获得焦点,在弹出覆盖窗口或设备锁定时失去焦点,并在设备解锁时获得焦点。

那么,是否有任何覆盖窗口弹出,或者您是否锁定了设备或类似的东西?

另外,为什么不使用 AppDelegate 中的方法来监听这些事件呢?

编辑

问题似乎在于 MapKit 的弹出窗口要求用户使用它的位置。

于 2013-04-11T08:16:08.267 回答