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

标签 ios autorelease cfdata

当我通过

返回一个 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 内存管理问题。

关于ios - 如何在没有内存泄漏的情况下返回 CFDataRef?[ios],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8208917/

相关文章:

ios - 从 Tap Gesture 中获取特定的 Collection View 单元格

iOS FacebookSDK 的 Scrumptious 示例应用程序不起作用,因为它总是收到 FBErrorCategoryUserCancelled

ios - 如何在 iOS 中发布数据?

objective-c - iOS 过早释放对象 - 可能与 Autorelease 和 Copy 混淆

iOS 自动释放池 block

ios - Xcode IOS 无法识别 CGDataProviderCreateWithCFData 函数

ios - 在后台线程中通过 NSData -initWithContentsOfURL 下载图像时,CFData(存储)增加到 200MB

ios - UISearchController UITableView 旋转显示

ios - Objective C block 会保留 UI 自动释放问题吗?

ios - UIWebView - CFData 何时(或如何)发布?