2011-09-27 82 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