2012-05-06 37 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

我發現它是什麼..這是一個錯誤,但不知道爲什麼會導致這種情況。我將圖像的不透明度設置爲淡出效果,並且我最終連續兩次完成了該操作。現在它似乎運行順利。 –