2011-06-26 45 views
2

我正在創建一個GCD調度隊列來處理異步創建和保存新的託管對象。作爲ivar的GCD dispatch_queue_t - 內存管理?

首先,是否有必要將它創建爲實例變量?假設我有一個(假設)方法-newObjectWithProperties:,並且我使用標籤"com.myapp.coredata"在本地創建了隊列。下次我撥打-newObjectWithProperties:並重新創建具有相同標籤的隊列,但該隊列上的前一個後臺任務仍不完整,該隊列的本地「重新創建」是否對應於相同的實際隊列?或者它會拋出異常?如果是後者,那麼我認爲該隊列需要一個類範圍的實例變量。

假設需要ivar,應如何處理內存管理?我想我會在-init中使用dispatch_queue_create(),然後在-dealloc中簡單地撥打dispatch_release()

回答

0

我做了類似的事情,但我創建了一次隊列,並隨時重新使用該隊列,以便隨時調度後臺任務。隊列在第一次需要時(不在init中)創建並存儲在ivar中,然後在dealloc中銷燬。

+0

有沒有一種方法來檢查隊列的存在,還是隻檢查變量是否爲'nil'? – Stuart

+0

不,我使用空值檢查。我不知道Nil是否適用,因爲它是不透明的類型。無法回想起Nil是否會工作,現在遠離計算機。 – RyanR