5

当我返回CFDataRef

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

有内存泄漏,如何进行CFDataRefautorelease?方法 [data autorelease] 不退出。

4

2 回答 2

8

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

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

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

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

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

于 2011-11-21T08:14:11.857 回答
3

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

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

-(CFDataRef)MyFunction{
    .....
    CFDataRef data = CFDataCreate(NULL, buf, bufLen);
    free(buf);
    return (CFDataRef)[(id)data autorelease];
}
于 2012-09-26T06:48:28.870 回答