在非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
}
答案 0 :(得分:0)
您应该在某个时候致电release
CFArray
,否则会泄漏。根据调用CreateNonRetainingArray
的{{3}}负责释放它。{/ p>
顺便说一句,没有必要通过RetainNoOp
和ReleaseNoOp
,因为CFArray的基本行为是"Create Rule"。