当我的应用响应内存警告时,我看到了一些不寻常的行为 - 数据主要不同步。
如果我的应用收到内存警告,警告会将控件传递给主线程吗?
如果没有,我假设我必须做一些数据保护,如果内存警告将释放可能在主线程上使用的数据。
答案 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
内调用此函数,传入一个包含您需要完成的所有内容的块,然后保证在执行传入块中的代码时位于主线程上。