2013-04-11 16 views
0

如果一個UIViewController運行如下所示的後臺線程操作,並在執行前釋放(讓它從UINavigationController中彈出),後臺線程是否會停止?什麼是確保後臺線程完成的好方法? 我擔心的是,如果用戶在字段中輸入一個值,並且在取消分配視圖控制器之前未更新數據庫,則數據庫將不會更新。包含後臺線程的ViewController的位置

// Doing something on the main thread 

dispatch_queue_t myQueue = dispatch_queue_create("My Queue",NULL); 
dispatch_async(myQueue, ^{ 
    // Perform long running process 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     // Update the UI 

    }); 
}); 

// Continue doing other stuff on the 
// main thread while process is running. 
+0

通過實驗,我確定在釋放對象後後臺線程完成。我的問題是,這是爲什麼? – ChemDev 2013-04-11 03:36:59

回答

1

不,後臺線程不會停止。

這是因爲GCD將保留塊直到塊完成。只要您發送塊,您的視圖控制器就變得無關緊要。另外,如果你有任何變量的引用,無論是視圖控制器本身,還是本地定義塊的方法範圍,那些也將被保留。

因此,即使視圖控制器不再處於導航堆棧中,您的視圖控制器也不會被釋放。

+0

有道理感謝 – ChemDev 2013-04-12 11:49:05