(但這個問題是完全不同的)我有沒有必要在ARC下調用dispatch_release?
這種非ARC的代碼示例設置了一個基於GCD定時器和它的dispatch_source_t對象調用dispatch_release:
__block BOOL done = NO;
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue());
if (timer) {
uint64_t milliseconds = 100ull;
uint64_t interval = milliseconds * NSEC_PER_MSEC;
uint64_t leeway = 10ull * NSEC_PER_MSEC;
__block typeof(self) _self = self;
dispatch_source_set_timer(timer, dispatch_walltime(NULL, 0), interval, leeway);
dispatch_source_set_event_handler(timer, ^{
//[_progressBar setProgress:exportSession.progress animated:YES];
if (done) {
dispatch_source_cancel(timer);
dispatch_release(timer);
_self.exportingMovieLabel.hidden = YES;
_self.exportingProgress.hidden = YES;
}
});
dispatch_resume(timer);
}
我才知道,你這樣做不必在ARC下發布隊列對象。但是其他GCD對象就像一個調度源?
聲稱的「重複問題」甚至不是很接近。答案專門討論GCD隊列。這個問題具體詢問其他GCD對象是否屬實。 – openfrog
試試吧。如果沒有必要,編譯器不會讓你(不是)。 –
根據我的經驗,Apple文檔總是提到你需要管理它的必要版本。通常,具有執行釋放的特定功能。在這種情況下,閱讀文檔,它看起來取決於您是否需要自己管理版本。我認爲如果你使用dispatch_retain並持有一個指針,你需要自己釋放它。儘管如此,我還沒有使用過這個功能,所以請帶上一點鹽。 –