Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS中的主线程是否收到内存警告?_Ios_Cocoa Touch - Fatal编程技术网

iOS中的主线程是否收到内存警告?

iOS中的主线程是否收到内存警告?,ios,cocoa-touch,Ios,Cocoa Touch,当我的应用程序响应内存警告时,我看到了一些不寻常的行为——数据主要不同步 如果我的应用程序收到内存警告,警告是否会将控制传递给主线程 如果没有,我假设如果内存警告将释放主线程上可能正在使用的数据,我必须进行一些数据保护 我很确定-didReceiveMemoryWarning只会在主线程上调用 无论如何,您可以这样做来确保这一点,而不会出现潜在的死锁: void invokeBlockOnMainThread(dispatch_block_t block) { if([NSThread i

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

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

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

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

无论如何,您可以这样做来确保这一点,而不会出现潜在的死锁:

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

   dispatch_sync(dispatch_get_main_queue(), block);
}

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

鉴于建议使用-didReceiveMemoryWarning方法来丢弃视图,鉴于视图只能从主线程进行操作,可以安全地假设该方法只能在主线程上调用

如果您发现情况并非如此,或者您希望在文档中明确说明这一点,请