0

Stack Overflow 的人们我需要你的帮助。我即将向 App Store 发布我的第一个应用程序,我需要帮助解决我的应用程序存在的内存泄漏问题。它是一个简单的基于视图的应用程序,具有多个视图、iAd 和带有声音的按钮(该应用程序是一个简单的音板)。我需要我应该放什么的例子和一张图片

分析器消息:Potential Leak of an Object allocated on Line 135 and stored into 'soundFileURLRef'

-(IBAction)sound25 {
    CFBundleRef mainBundle = CFBundleGetMainBundle();
    CFURLRef soundFileURLRef;
    soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"BELLMACH", CFSTR ("wav"), NULL);

    UInt32 soundID;
    AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
    AudioServicesPlaySystemSound(soundID);
} 
4

2 回答 2

3

文档CFBundleCopyResourceURL说它遵循“创建规则”,这反过来基本上说任何名称中带有“创建”或“复制”的函数都会返回一个保留对象。在您使用完它之前,您拥有该对象的所有权 - 因此,CFRelease当您不再使用该对象时,您有责任调用该对象。大概是在你用它来创建和播放系统声音之后,所以你可以添加

CFRelease(soundFileURLRef);

在该方法结束时并没问题,假设您不坚持或不需要soundFileURLRef其他任何地方。

于 2012-07-13T22:13:39.747 回答
0

由于名称“CFBundleCopyResourceURL”包含单词“Copy”,因此它遵循“创建规则”并且您“拥有”该对象并负责在完成后释放它。

于 2012-07-13T22:13:55.827 回答