Stack Overflow的人我需要你的帮助。我即将发布我的第一个应用程序到App Store,我需要帮助修复我的应用程序的内存泄漏。它是一个简单的基于视图的应用程序,具有多个视图,iAds和带声音的按钮(该应用程序是一个简单的声板)。我需要一些关于我应该放置什么的示例和一张图片
分析器消息: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);
}
答案 0 :(得分:3)
documentation for CFBundleCopyResourceURL
表示它遵循"Create Rule",而{{3}}基本上表示任何名称中带有“create”或“copy”的函数都会返回一个保留对象。在完成此操作之前,您拥有此对象的所有权 - 因此,当您无需进一步使用该对象时,您有责任在该对象上调用CFRelease
。据推测,在您使用它来创建和播放系统声音之后,您可以添加
CFRelease(soundFileURLRef);
在该方法的最后,没问题,假设你没有在其他任何地方坚持或需要soundFileURLRef
。
答案 1 :(得分:0)
由于名称“CFBundleCopyResourceURL”包含单词“Copy”,它遵循“创建规则”并且您“拥有”该对象并负责在完成后释放它。