Справка по управлению памятью с воспроизводимыми звуками - iPhone Programmingv - PullRequest
1 голос
/ 28 декабря 2010

Я начинаю программировать на iPhone и пытаюсь создать небольшое тестовое приложение, которое воспроизводит звук при нажатии кнопки. Этот вопрос довольно нуб, так что терпите меня. В значительной степени я пытаюсь понять, как справиться с ситуацией с памятью. Куда я выпускаю созданные экземпляры, чтобы избежать проблем с памятью? Прямо сейчас, если я нажимаю на кнопку несколько раз быстро, приложение вылетает. Я попытался объявить все в viewDidLoad и поместить выпуск в метод dealloc, но в этом случае мне приходится ждать, пока закончится воспроизведение всего звука, прежде чем я смогу воспроизвести звук снова. Я хочу иметь возможность нажимать кнопку в середине воспроизводимого звука и «прерывать его», если это имеет смысл.

То, как написано сейчас, когда вы нажимаете кнопку, вызывается этот метод и воспроизводится звук

-(IBAction)buttonPressed:(id)sender{
 NSString *path = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"mp3"];
 AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error: NULL];
 theAudio.delegate = self;
 [theAudio play];
    }

В этой настройке это работает так, что я могу «прервать» уже воспроизводимый звук, снова нажав кнопку, и звук возобновится. Однако быстрое нажатие вызывает сбой приложения.

1 Ответ

0 голосов
/ 28 декабря 2010

Вы должны немедленно отпустить, прежде чем выйти из метода следующим образом:

-(IBAction)buttonPressed:(id)sender{
 NSString *path = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"mp3"];
 AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error: NULL];
 theAudio.delegate = self;
 [theAudio play];
 [theAudio release];
    }

или что-то в этом роде.

Потому что, когда вы выделяете / инициализируете локальную переменную, вы присваиваете ей счет сохранения +1. Но когда вы выходите из метода, ссылка на эту переменную все еще жива, и вы не можете получить к ней доступ, что приводит к утечке памяти. Попробуйте начать с: Управление памятью . Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...