1

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

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

有什么方法可以告诉操作系统不要在后台回调之间销毁/清除实例变量?

4

2 回答 2

1

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

于 2013-03-19T21:39:41.510 回答
1

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

为什么某些对象成员超出了 Objective C 的范围

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

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

于 2013-03-27T14:16:33.563 回答