非保留阵列上的内存泄漏

时间:2014-06-30 07:41:25

标签: ios objective-c memory-leaks nsarray

在非ARC项目中,我需要使用非保留数组。我从旧框架Three20中获得了实现。当我使用Instruments跟踪我的内存使用情况时,它会向我显示所有未恢复数组的泄漏。

以下是实施方案。你有什么想法吗?

static const void* RetainNoOp(CFAllocatorRef allocator, const void *value) { return value; }
static void ReleaseNoOp(CFAllocatorRef allocator, const void *value) { }

NSMutableArray* CreateNonRetainingArray() {
    CFArrayCallBacks callbacks = kCFTypeArrayCallBacks;
    callbacks.retain = RetainNoOp;
    callbacks.release = ReleaseNoOp;
    return (NSMutableArray*)CFArrayCreateMutable(nil, 0, &callbacks); // leak here
}

1 个答案:

答案 0 :(得分:0)

您应该在某个时候致电release CFArray,否则会泄漏。根据调用CreateNonRetainingArray的{​​{3}}负责释放它。{/ p>

顺便说一句,没有必要通过RetainNoOpReleaseNoOp,因为CFArray的基本行为是"Create Rule"