0

私は次の問題を抱えています。私のアプリは、ユーザーがボタンを押した後、指定された回数 (たとえば 5 回) 毎秒ティック サウンドを再生する必要があります。

私はこれを使用しました:

for (int w=1; w<=5; w++) {
[NSThread detachNewThreadSelector:@selector(tic) toTarget:self withObject:nil];
[NSThread sleepForTimeInterval:1.0];
}

どこ:

- (void)tic {
NSAutoreleasePool *ticPool = [[NSAutoreleasePool alloc] init];
player_tic = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:@"tick" ofType:@"aif"]] error:nil];
[player_tic setDelegate:self];
[player_tic play];
[ticPool drain];
}

と:

- (void) audioPlayerDidFinishPlaying: (AVAudioPlayer *)player_tic successfully:(BOOL)flag {
NSLog(@"Audio finished playing.");
[player_tic release];
}

すべてがうまくいくようです。私の問題は、オブジェクトが最後に一緒に解放されることです。サウンドを再生するたびに、関連する「player_tic」をすぐに解放する
必要があります。

他の情報:

.m:
@synthesize player_tic;

.h:
@interface myController : UIViewController {
...
AVAudioPlayer *player_tic;
}
@property (nonatomic, retain) AVAudioPlayer *player_tic;

何よりも、コンパイル時に次の警告があります。
local declaration of 'player_tic' hides instance variable

私を助けてください!
事前にどうもありがとうございました。

――カルロ

4

2 に答える 2

0

その変数を設定するときにself.player_ticを使用したいと思います。また、そのインスタンスを自動リリースしたいと思います。別のNSAutoreleasePoolを設定する必要があるかどうかもわかりません。

self.player_tic = [[[AVAudioPlayer alloc] initWithContentsOfURL:... error:nil] autorelease]
于 2011-01-04T10:39:57.593 に答える
0

System Sound Servicesは AVAudioPlayer よりも応答性が高いことがわかりました。

また、コントローラーの保持プロパティが原因であるリリースの問題も解決します。保持/解放の詳細については、メモリ管理のリファレンス マニュアルを参照してください。

于 2010-12-31T10:36:16.880 に答える