如何在没有内存泄漏的情况下返回CFDataRef?[ios]

时间:2011-11-21 08:10:32

标签: ios autorelease cfdata

当我通过

返回CFDataRef
(CFDataRef)MyFunction{
    .....
    CFDataRef data = CFDataCreate(NULL, buf, bufLen);
    free(buf);
    return data;
}

内存泄漏,如何使CFDataRef自动释放? 方法[data autorelease]不会退出。

2 个答案:

答案 0 :(得分:6)

您无法自动释放Core Foundation对象。 (但是,您可以自动释放支持免费桥接的Core Foundation对象,例如CFDataRef;请参阅下面的@ newacct&#39答案。)

Objective-C约定是为您的方法命名,使其以单词new开头,以指示调用者负责释放其返回值。例如:

+ (CFDataRef)newDataRef {
    return CFDataCreate(...);
}

CFDataRef myDataRef = [self newDataRef];
...
CFRelease(myDataRef);

如果您遵守此命名约定,Xcode静态分析器将正确标记Core Foundation内存管理问题。

答案 1 :(得分:2)

  

如何使CFDataRef自动释放?方法[数据自动释放]   不退出。

只需将其转换为对象指针类型即可调用autorelease

-(CFDataRef)MyFunction{
    .....
    CFDataRef data = CFDataCreate(NULL, buf, bufLen);
    free(buf);
    return (CFDataRef)[(id)data autorelease];
}