每当用户在我的应用处于活动状态时点按主页按钮,我都会收到以下异常。稍微警告 - 下面的示例例外引用了NSCFString
。但是,发送此消息的对象类型因此导致异常是完全随机的。它可以是NSData
或OS_dispatch_queue_specific_queue
。
[__ NSCFString didEnterBackground:]:发送到的无法识别的选择器 实例0x155344c0 * 由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:' - [__ NSCFString didEnterBackground:]:发送到实例的无法识别的选择器 0x155344c0
每次应用程序重新启动时都会发生活动,但接收邮件的对象永远不会相同。
我认为这是某种内存问题,但我无法跟踪它。主要是因为我的代码中没有任何内容直接发送/接收此消息,或者已注册接收UIApplicationWillResignActiveNotification
。另外,我的appDelegate中没有applicationDidEnterBackground:application
方法。
有没有人见过这种行为?如果是这样,调试的最佳方法是什么?或者换句话说,什么样的对象会自动发送didEnterBackground
消息,显然我管理不善?
答案 0 :(得分:3)
听起来你有一个僵尸。
僵尸是一个在被解除分配后被调用的对象。通常,对象的内存地址随后用于另一个对象,因此消息将转到错误的对象。
您是否有使用addObserver:selector:name:object:?方法为“do enter background”通知(UIApplicationDidEnterBackgroundNotification)注册一个应用程序对象的代码?该通知是否指定了“didEnterBackground:?”的选择器
我的猜测是你正在注册UIApplicationDidEnterBackgroundNotification通知,然后你正在指定的notificationObserver被解除分配。这将导致您描述的确切行为。
顺便说一下,您可能想要使用僵尸工具运行您的应用程序,或打开NSZombies环境变量来查找僵尸。然后按主页按钮导致崩溃并查看Xcode /仪器告诉您的内容。