首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否需要在Objective-C代码(带ARC的iOS 6)中释放C变量?

是否需要在Objective-C代码(带ARC的iOS 6)中释放C变量?
EN

Stack Overflow用户
提问于 2013-03-02 19:17:37
回答 3查看 188关注 0票数 2

如果我在iPhone代码中实现以下内容:

代码语言:javascript
运行
复制
NSString* soundPath = [[NSBundle mainBundle] pathForResource:soundFile ofType:@"wav"];
SystemSoundID feedbackSound;
AudioServicesCreateSystemSoundID((__bridge CFURLRef) [NSURL fileURLWithPath:soundPath], &feedbackSound);
AudioServicesPlaySystemSound(feedbackSound);

我真的需要释放"feedbackSound“,因为它是C代码吗?会漏水吗?

我使用的是ARC / iOS 6。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-02 19:22:09

你应该这样做。要调用的正确方法是:

代码语言:javascript
运行
复制
AudioServicesDisposeSystemSoundID

(reference)。

一般来说,ARC只处理Objective-C对象。在处理较低级别的框架(核心图形、AudioServices等)时许多调用都会“在幕后”分配内存,由您负责处理这些内存。在许多情况下,您有特定的方法来进行释放,就像您进行分配一样。

票数 5
EN

Stack Overflow用户

发布于 2013-03-02 19:23:53

ARC只管理Objective-C对象的内存。然而,系统声音服务是一个C接口。在这种情况下,您必须自己管理内存。

代码语言:javascript
运行
复制
AudioServicesDisposeSystemSoundID (feedbackSound);
票数 1
EN

Stack Overflow用户

发布于 2013-03-02 19:29:31

是的,你必须这样做。ARC仅适用于声明为Objective-C对象的类型。问题中的程序将产生泄漏。

malloc需要freenew需要deleteCFStringCreate...需要CFRelease --以此类推…

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15173832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档