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

use*_*hhh 3 autorelease cfdata ios

当我返回一个CFDataRef

(CFDataRef)MyFunction{
    .....
    CFDataRef data = CFDataCreate(NULL, buf, bufLen);
    free(buf);
    return data;
}
Run Code Online (Sandbox Code Playgroud)

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

tit*_*coy 6

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

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

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

CFDataRef myDataRef = [self newDataRef];
...
CFRelease(myDataRef);
Run Code Online (Sandbox Code Playgroud)

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