当没有ARC时,我是否需要阻止释放dispatch_barrier_async中的dispatch_Block_t?我注意到";要提交到目标调度队列的屏障块。此块将被复制并保留,直到它完成执行,此时它将被释放"在dispatch_barrier_async中。
dispatch_block_t work = dispatch_block_create(0, ^{
//...
});
if (work) {
dispatch_barrier_async(_dispatchQueue, work);
auto res = dispatch_block_wait(work, timeout);
if (res) {
// timeout, then cancel, I should release work here?
dispatch_block_cancel(work);
}
Block_release(work); // do I need to release work when no ARC? the dispatch_barrier_async would release it if it's executed?
}
当不使用ARC时,是的,你必须释放它。按命令+shift+o件-点击代码中的dispatch_block_create
并选择"跳到定义"(,它会显示:
当不使用Objective-C ARC构建时,必须使用
-[release]
消息或Block_release()
函数释放。
话虽如此,您已经在下面发布了work
,因此您当然不必在if
语句中再次发布它。
不幸的是,静态分析器(shift+command+b