2011-09-27 80 views
0

当我的应用程序响应内存警告时,我看到了一些不寻常的行为 - 主要是数据不同步。在iOS的主线程中是否收到内存警告?

如果我的应用程序收到内存警告,警告是否会将控制权交给主线程?

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

回答

3

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

无论如何,这是你可以做什么来确保这一点没有(可能)死锁:

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

    dispatch_sync(dispatch_get_main_queue(), block); 
} 

调用此函数内-didReceiveMemoryWarning,传递一个块的一切,你需要做,那么你就保证在执行传入块中的代码时在主线程上。

4

由于-didReceiveMemoryWarning方法的推荐用途是抛弃视图,并且只能从主线程操纵视图,因此假定该方法只会在主线程上被调用是安全的。

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