2010-04-07 17 views
4

因此,我將小圖像保存爲核心數據,這需要很短的時間才能保存,比如0.2秒,但用戶在瀏覽滾動視圖時需要這麼做,以便提高響應速度我正在將保存移到一個線程。這很好,一切都得到保存,應用程序響應。然而,在core-data + multithreading doco中有一件事令我擔心:在線程中保存核心數據,如何確保在退出前完成寫入操作?

「在Cocoa中,只有主線程沒有被分離,如果你需要保存在其他線程上,你必須編寫其他代碼主線程可以防止應用程序退出,直到完成所有保存操作。「

好的,你是怎麼做到的?它只需要持續〜0.2秒,而且很少會發生,因爲應用程序退出的機會非常低。我如何在主線程上運行一些防止應用程序退出並且不會阻止gui的東西?

感謝

回答

3

讓您保存線程設置一個「保存正在進行」標誌,並有主線程檢查,在應用程序委託的applicationWillTerminate:方法。顯然,你需要使用一個互斥鎖來同步兩個線程之間的標誌訪問。

如果應用程序嘗試退出時正在進行保存,主線程將執行pthread_cond_wait;一旦保存完成,保存線程將使用pthread_cond_signal將其喚醒。

+0

閱讀這個doco看起來像它會工作,我會給它一個去感謝! – Shizam 2010-04-08 15:10:33

+1

你願意擴大你的答案並舉個例子嗎?我試圖找出如何設置這個,但我無法找到一個例子。我設置了一個標誌被設置爲false的地方,並且「threadDone」將其設置爲true。在模擬器中工作良好,但從iTunes下載後無法正常工作。 – James 2011-12-28 16:41:23

+0

@James這就是我所做的一切:http://pastie.org/4663834它不只是設置一個標誌,它的一個應用程序標誌。你可以找到更多關於beginBackgroundTaskWithExpirationHandler:在http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIApplication_Class/Reference/Reference.html – Shizam 2012-09-04 18:57:42