首页 > 解决方案 > dispatchBlock 和手动捕获的资源

问题描述

我有一个调度块,可能需要释放而不是执行。由于我的调度块捕获了手动保留的资源,这会泄漏,对吗?

CFRetain(buffer);
dispatch_block_t dispatchBlock = dispatch_block_create(0, ^{
    //...
    CFRelease(buffer);
});

Block_release(dispatchBlock);

我的项目严重依赖于捕获资源的调度块,我现在有一个案例,我可能需要释放一个块而不是执行它,所以我想这样做是为了防止泄漏。我真的不想重写所有内容!

CFRetain(buffer);
dispatch_block_t dispatchBlock = dispatch_block_create(0, ^{
    //...
    CFRelease(buffer), buffer = NULL;
});

Block_release(dispatchBlock);
if (buffer)
    CFRelease(buffer), buffer = NULL;

防止泄漏的更好解决方案将不胜感激!

标签: objective-cgrand-central-dispatch

解决方案


推荐阅读