простой пример, но я не понимаю, почему нет утечек - PullRequest
2 голосов
/ 14 апреля 2011
- (IBAction) btnFire:(id)sender {

    NSString *path = [NSString stringWithFormat:@"%@%@", [[NSBundle mainBundle] resourcePath],   @"/gunShot.wav"];

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

    AVPlayer *shotSound = [[AVPlayer alloc] initWithURL:filePath];

    [shotSound play];
}

Если я опубликую здесь shotSound, он не будет воспроизводиться.В то же время нет утечек.

Почему приборы не показывают утечек?Как выпустить shotSound?

Ответы [ 2 ]

2 голосов
/ 14 апреля 2011

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

- (IBAction) btnFire:(id)sender {

 if(shotSound==nil)
{
        NSString *path = [NSString stringWithFormat:@"%@%@", [[NSBundle mainBundle] resourcePath],   @"/gunShot.wav"];

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

       shotSound = [[AVPlayer alloc] initWithURL:filePath];
}

        [shotSound play];

}

отпустите в dealloc. Если вы просто хотите иметь звук в этом действии, вы можете использовать AVAudioPlayer.

Иногда утечка прибора не может обнаружить ее, в этих случаях вы можете использовать инструмент построения и анализа. Кроме того, как вы сказали, если вы отпускаете объект проигрывателя, то сбой приложения может быть вызван тем, что звук все еще воспроизводится, и вы отпускаете проигрыватель (не уверен).

0 голосов
/ 14 апреля 2011

Вы можете попробовать

AVPlayer *shotSound = [AVPlayer playerWithURL:filePath];

Примечание. Возвращает нового игрока для воспроизведения одного аудиовизуального ресурса, на который ссылается данный URL.

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