当我的处理程序被系统调用时,我似乎松了一些指向实例变量的指针。
在我的.m实现中我有
@implementation BackgroundWorker
MyApplication* myApp;
NSDate* lastUpdate;
并且在我的处理程序中该变量不再有效:
[[UIApplication sharedApplication] setKeepAliveTimeout:600 handler:^{
// myApp is valid however
// Check that enough time has passed
NSDate* now = [NSDate date];
if (lastUpdate == nil || // <--- lastUpdate not a valid object
[now timeIntervalSinceDate:lastUpdate] >= TIME_RESOLUTION_SEC) {
// do stuff
lastUpdate = now;
}
}];
我在类方法中正确初始化 lastUpdate ,它在应用程序第一次运行时有效,但如果它转到后台并且调用处理程序,则变量不再有效。
任何告诉操作系统不要在后台回调之间销毁/清除实例变量的方法吗?
答案 0 :(得分:1)
将值存储在应用程序委托中,但我很可能将其存储在NSUserdefaults中,并在每次需要时提取值。如果用户杀死应用程序,这也将保留该值。
答案 1 :(得分:1)
在另一个线程上找到解决方案:
Why are some object members out of scope in Objective C
它与属性和支持变量等有关。
我必须将NSDate分配给属性而不是支持变量......