2

このメモリリークの問題を解決するには、いくつかの助けが必要です。ARCを使用しています。

潜在的なリークは次の行にあります。

NSURL *aFileURL = [NSURL fileURLWithPath:filePath isDirectory:NO];

コードは次のとおりです。

// === Check if the game should play sound === //
if (sound == YES) {
    //==== PLAY THE LOOSING SOUND ====//
    // Form a URL to the sound file, which in init using the Path
    NSBundle *mainBundle = [NSBundle mainBundle];
    NSString *filePath = [mainBundle pathForResource:@"wrong2" ofType:@"wav"];
    NSURL *aFileURL = [NSURL fileURLWithPath:filePath isDirectory:NO];

    // Create a sound ID, 
    SystemSoundID myID;
    // Register the sound
    AudioServicesCreateSystemSoundID((__bridge_retained CFURLRef)aFileURL, &myID) ;
    // Play the sound!
    AudioServicesPlaySystemSound(myID);
}
4

1 に答える 1

9

__bridge_retainedに置き換え__bridgeます。

__bridge_retainedこれは、の所有権をに譲渡し、その関数がそれを解放する必要があることを意味しますaFileURLAudioServicesCreateSystemSoundID()そうではありません)。

そして、私はあなたも呼ぶべきだと思います

AudioServicesDisposeSystemSoundID(myID)

サウンドオブジェクトが不要になったとき。

ヒント:静的アナライザーに「潜在的なリーク」警告が表示されたら、警告の左側にある青いアイコンをクリックすると、問題に関する詳細情報が表示されます。

于 2012-08-12T09:19:13.363 に答える