如何在不发生内存泄漏的情况下返回CFDataRef?[ios]

发布于 2024-12-17 16:09:15 字数 253 浏览 2 评论 0原文

当我返回CFDataRef

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

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

When I return a CFDataRef by

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

There is a memory leak, how to make CFDataRef autorelease?
the method [data autorelease] doesn't exit.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

椵侞 2024-12-24 16:09:15

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

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

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

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

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

You can't autorelease Core Foundation objects. (However, you can autorelease Core Foundation objects that support toll-free bridging such as CFDataRef; see @newacct's answer below.)

The Objective-C convention is to name your method such that it starts with the word new to indicate that the caller is responsible for releasing its return value. For example:

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

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

If you conform to this naming convention, the Xcode static analyzer will correctly flag Core Foundation memory managment issues.

迷途知返 2024-12-24 16:09:15

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

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

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

how to make CFDataRef autorelease? the method [data autorelease]
doesn't exit.

Simply cast it to an object pointer type in order to call autorelease:

-(CFDataRef)MyFunction{
    .....
    CFDataRef data = CFDataCreate(NULL, buf, bufLen);
    free(buf);
    return (CFDataRef)[(id)data autorelease];
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文