当没有ARC时,我是否需要Block_release dispatch_Block_t,它在dispatch_barri



当没有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

相关内容

  • 没有找到相关文章

最新更新