2012-10-04 69 views
20

在Paul Hegarty課程的iOS 5教程之後,我們在一個展示GCD使用的應用程序中看到了這段代碼。顯然GCD需要釋放,因爲多線程在某些對象仍然需要時會有些不可預知。你需要在iOS 6.0的ARC下發布GCD隊列嗎?

dispatch_async(dowloadQueue, ^{ 
    .... 
    // do some stuff 
    .... 
    }); 
    dispatch_release(dowloadQueue); 

我已經升級到iOS 6的XCode 4.5,我得到一個 「ARC禁止顯式釋放......」 消息

我沒有嘗試下的iOS5/XCode的驗證碼4.2

這是因爲ARC變得更聰明,我不再需要在GCD中發佈了嗎? 還是我誤解了?

回答

29

當您定位Mountain Lion和iOS 6.0時,ARC現在會爲您管理調度隊列和其他GCD類型。如果你的目標是OS X或iOS的早期版本,你仍然需要明確地保留和釋放GCD類型(不僅僅是爲了線程安全的原因,否則你會泄漏內存),但是這僅僅針對新的OS版本。

這就是爲什麼您在針對iOS 6.0時在ARC下看到這樣的編譯器錯誤。

+0

當你創建隊列時,你需要__bridge_transfer到Objective-C嗎? – openfrog

+0

@openfrog - 不,如果它被視爲一個Objective-C對象,它已經被ARC處理過了,所以不需要將其轉移。 –

+0

@BradLarson有沒有辦法將它關閉?或者,我該如何編寫它才能在iOS 5和iOS 6下編譯? – fishinear