2012-05-06 36 views
0

我打得使用系统声音......与系统ARC内存管理问题听起来

NSString *path = [NSString stringWithFormat:@"%@%@", 
         [[NSBundle mainBundle] resourcePath], 
         @"/heartbeat.wav"]; 

    //declare a system sound id 
    SystemSoundID soundID4; 

    //Get a URL for the sound file 
    NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO]; 

    //Use audio sevices to create the sound 
    AudioServicesCreateSystemSoundID((__bridge_retained CFURLRef)filePath, &soundID4); 

    //Use audio services to play the sound 
    AudioServicesPlaySystemSound(soundID4); 

    AudioServicesDisposeSystemSoundID(soundID4); 

我不知道这是问题..但如果它与运行“分析”说到作为潜在的泄漏。显然,随着应用程序越来越慢,越来越慢,因为我在模拟器中运行了更多次。我已经找到了如何处理这个不使用弧的例子,但没有用。任何建议将不胜感激。

+0

你可以关闭ARC此文件作为B计划 – DGund

+1

是啊,我想过这个问题...这将导致对事物的重大改写我有它设置的方式就是一切。 –

回答

1

“它出来作为一个潜在的泄漏”。它是什么”?

其次,你没有通过观察程序越来越慢分析内存泄漏。事实上,这不是内存泄漏的正常症状,除非您耗尽物理RAM并导致大量交换。您通过使用像Leaks工具那样的实际识别不再可及的内存来诊断泄漏。

这就是说,你不想__bridge_retained,你只是想__bridge。其中一个原因,我更喜欢CFBridgingRetain()CFBridgingRelease()功能,而不是__bridge_retained__bridge_transfer铸件是,你不太可能犯这样的错误。例如,你从来没有写过:

所有的
AudioServicesCreateSystemSoundID(CFBridgingRetain(filePath), &soundID4); 

首先,很明显,没有必要保留filePath只是将它传递给一个函数。其次,调用CFRetain()风格功能也清楚地表明,你有责任调用CFRelease()式的功能平衡。

+0

我运行在仪器下的代码,似乎总分配的内存不增加。一旦转换速度变慢,运行代码后。像键盘弹出到屏幕上的东西...标签加载淡入和淡出缓慢。如果它不是记忆问题,那会是什么? –

+0

不确定。检查是否有东西占用CPU。 –

+0

我发现它是什么..这是一个错误,但不知道为什么会导致这种情况。我将图像的不透明度设置为淡出效果,并且我最终连续两次完成了该操作。现在它似乎运行顺利。 –