Как освободить объект AVAudioPlayer, когда он должен воспроизводить короткий звук каждую секунду после нажатия кнопки - PullRequest
0 голосов
/ 31 декабря 2010

У меня следующая проблема, сводящая меня с ума.Мое приложение должно воспроизводить тиковый звук каждую секунду определенное количество раз (например, 5) после нажатия пользователем кнопки.

Я использовал это:
<br> for (int w=1; w<=5; w++) {<br> [NSThread detachNewThreadSelector:@selector(tic) toTarget:self withObject:nil];<br> [NSThread sleepForTimeInterval:1.0];<br> }<br>

, где:

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

и:

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

Кажется, все работает.Моя проблема в том, что объект освобождается вместе в конце.
Мне нужно, чтобы после каждого проигрываемого звука соответствующая player_tic была немедленно освобождена.

Другая информация:

In .m:
@synthesize player_tic;

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

На вершиневсе, у меня есть это предупреждение в сборнике:
local declaration of 'player_tic' hides instance variable

Пожалуйста, помогите мне!
Заранее большое спасибо.

- Карло

Ответы [ 2 ]

0 голосов
/ 04 января 2011

Я думаю, что вы хотите использовать self.player_tic при установке этой переменной, и я считаю, что вы также хотите автоматически выпустить этот экземпляр. Я не уверен, что установка отдельного NSAutoreleasePool также необходима.

self.player_tic = [[[AVAudioPlayer alloc] initWithContentsOfURL:... error:nil] autorelease]
0 голосов
/ 31 декабря 2010

Я обнаружил Системные звуковые службы более отзывчивыми, чем AVAudioPlayer.

Это также решает проблему выпуска, вызванную свойством retain вашего контроллера.Прочтите справочное руководство по управлению памятью для получения дополнительной информации о сохранении / выпуске.

...