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

当我返回CFDataRef

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

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

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

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

 + (CFDataRef)newDataRef { return CFDataCreate(...); } CFDataRef myDataRef = [self newDataRef]; ... CFRelease(myDataRef); 

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

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

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

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