iOS keepAlive回调实例变量

时间:2013-03-19 11:54:39

标签: objective-c background callback

当我的处理程序被系统调用时,我似乎松了一些指向实例变量的指针。

在我的.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 ,它在应用程序第一次运行时有效,但如果它转到后台并且调用处理程序,则变量不再有效。

任何告诉操作系统不要在后台回调之间销毁/清除实例变量的方法吗?

2 个答案:

答案 0 :(得分:1)

将值存储在应用程序委托中,但我很可能将其存储在NSUserdefaults中,并在每次需要时提取值。如果用户杀死应用程序,这也将保留该值。

答案 1 :(得分:1)

在另一个线程上找到解决方案:

Why are some object members out of scope in Objective C

它与属性和支持变量等有关。

我必须将NSDate分配给属性而不是支持变量......