当我的应用程序响应内存警告时,我看到了一些不寻常的行为 - 主要是数据不同步。在iOS的主线程中是否收到内存警告?
如果我的应用程序收到内存警告,警告是否会将控制权交给主线程?
如果不是,我假设我必须做一些数据保护,如果内存警告将释放可能在主线程中使用的数据。
当我的应用程序响应内存警告时,我看到了一些不寻常的行为 - 主要是数据不同步。在iOS的主线程中是否收到内存警告?
如果我的应用程序收到内存警告,警告是否会将控制权交给主线程?
如果不是,我假设我必须做一些数据保护,如果内存警告将释放可能在主线程中使用的数据。
我很肯定-didReceiveMemoryWarning
只会在主线程上调用。
无论如何,这是你可以做什么来确保这一点没有(可能)死锁:
void invokeBlockOnMainThread(dispatch_block_t block) {
if([NSThread isMainThread]) {
block();
return;
}
dispatch_sync(dispatch_get_main_queue(), block);
}
调用此函数内-didReceiveMemoryWarning
,传递一个块的一切,你需要做,那么你就保证在执行传入块中的代码时在主线程上。
由于-didReceiveMemoryWarning
方法的推荐用途是抛弃视图,并且只能从主线程操纵视图,因此假定该方法只会在主线程上被调用是安全的。
如果您发现情况并非如此,或者您希望在文档中明确说明,请拨打file an enhancement request。