如何在不发生内存泄漏的情况下返回CFDataRef?[ios]
当我返回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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您无法自动释放 Core Foundation 对象。 (但是,您可以自动释放支持免费桥接的 Core Foundation 对象,例如 CFDataRef;请参阅下面 @newacct 的答案。)
Objective-C 约定是命名您的方法,使其以单词
new
表示调用者负责释放其返回值。例如:如果您遵循此命名约定,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:If you conform to this naming convention, the Xcode static analyzer will correctly flag Core Foundation memory managment issues.
只需将其转换为对象指针类型即可调用
autorelease
:Simply cast it to an object pointer type in order to call
autorelease
: