是否在iOS主线程上收到内存警告?

时间:2011-09-27 03:48:54

标签: ios cocoa-touch

当我的应用响应内存警告时,我看到了一些不寻常的行为 - 数据主要不同步。

如果我的应用收到内存警告,警告会将控件传递给主线程吗?

如果没有,我假设我必须做一些数据保护,如果内存警告将释放可能在主线程上使用的数据。

2 个答案:

答案 0 :(得分:4)

鉴于推荐使用-didReceiveMemoryWarning方法是抛弃视图,并且假设只应从主线程操作视图,可以安全地假设该方法只会在主线。

如果您发现情况并非如此,或者您希望在文档中明确说明,请file an enhancement request

答案 1 :(得分:3)

我很确定只会在主线程上调用-didReceiveMemoryWarning

无论如何,这是你可以做的,以确保没有(可能)死锁:

void invokeBlockOnMainThread(dispatch_block_t block) {
   if([NSThread isMainThread]) {
      block();
      return;
   }

   dispatch_sync(dispatch_get_main_queue(), block);
}

-didReceiveMemoryWarning内调用此函数,传入一个包含您需要完成的所有内容的块,然后保证在执行传入块中的代码时位于主线程上。