我使用的是通過其擁有的屬性訪問的dispatch_queue,像這樣:什麼是釋放GCD調度隊列屬性的正確方法?
@property (nonatomic, assign) dispatch_queue_t queue;
注意assign
關鍵字。隊列在整個對象生命中都被使用,因此被對象所擁有。當擁有的對象被釋放時,我釋放隊列:
-(void)dealloc
{
dispatch_release(self.queue);
self.queue = nil;
}
如何正確釋放此?將使用retain/release
工作?
如果在調用發佈時隊列正在等待/運行在隊列中,會發生什麼情況?
當然,如果您在dealloc中設置了類中的_isValid,則該對象將被銷燬,這意味着_isValid無法再安全讀取 - 這是什麼方法? – CiscoIPPhone 2012-07-27 17:18:38
其實它似乎調用dispatch_group_wait會完全避免這個問題。 – CiscoIPPhone 2012-07-27 17:23:01
@CiscolPPhone「對象將被銷燬」 - 實際上,不會訪問塊內的屬性會增加其保留計數,因此即使在執行dealloc之後,它仍會保留在塊的完成之前?我一直在這樣做,所以我通常只引用塊中的弱屬性(在我創建'__weak MyClass weakSelf = self'之前,然後在塊中使用weakSelf.property。然後如果塊在執行dealloc之後執行它只是命中一個零weakSelf.property&安全地死亡。) – jankins 2013-04-03 17:22:41