當我的應用程序響應內存警告時,我看到了一些不尋常的行爲 - 主要是數據不同步。在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。