2

iPhoneコード内に次を実装すると:

NSString* soundPath = [[NSBundle mainBundle] pathForResource:soundFile ofType:@"wav"];
SystemSoundID feedbackSound;
AudioServicesCreateSystemSoundID((__bridge CFURLRef) [NSURL fileURLWithPath:soundPath], &feedbackSound);
AudioServicesPlaySystemSound(feedbackSound);

「feedbackSound」は C コードなので、実際に解放する必要がありますか? 漏れますか?

ARC / iOS 6 を使用しています。

4

3 に答える 3

5

あなたがすべき。呼び出す正しいメソッドは次のとおりです。

AudioServicesDisposeSystemSoundID

参考)。

一般に、ARC は Objective-C オブジェクトのみを扱います。下位レベルのフレームワーク (Core Graphics、AudioServices など) を処理する場合、多くの呼び出しでメモリが "ボンネットの下" に割り当てられ、その処理を担当します。多くの場合、割り当てを行う場合と同様に、割り当て解除を行うための特定の方法があります。

于 2013-03-02T11:22:08.523 に答える
1

はい、あなたはしなければなりません。ARCは、Objective-Cオブジェクトとして宣言されたタイプにのみ適用されます。問題のプログラムはリークを引き起こします。

mallocが必要freeです。newが必要deleteです。CFStringCreate...ニーズCFRelease-など…</p>

于 2013-03-02T11:29:30.837 に答える
1

ARC は、Objective-C オブジェクトのメモリのみを管理します。ただし、System Sound Services は C インターフェイスです。この場合、メモリを自分で管理する必要があります。

AudioServicesDisposeSystemSoundID (feedbackSound);
于 2013-03-02T11:23:52.767 に答える