2010-12-16 3 views
0

У меня проблема с MPMoviePlayerViewController на iPad iOS 4.2. Приложение воспроизводит видео, но когда видео останавливается, память не освобождается. Чтобы создать видеопроигрыватель я использую следующий код:Проблема памяти MPMoviePlayerViewController


    MPMoviePlayerViewController * videoPlayer = [[MPMoviePlayerViewController alloc] initWithContentURL:articleUrl]; 
    [videoPlayer moviePlayer].movieSourceType = MPMovieSourceTypeFile; 
    [videoPlayer moviePlayer].controlStyle = MPMovieControlStyleDefault; 
    [videoPlayer moviePlayer].scalingMode = MPMovieScalingModeAspectFit; 
    [videoPlayer moviePlayer].fullscreen = NO; 

    self.playerViewController = videoPlayer; 
    [videoPlayer release]; 
    videoPlayer = nil; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(movieFinishedCallback:) 
               name:MPMoviePlayerPlaybackDidFinishNotification 
               object:[playerViewController moviePlayer]]; 

    MPMoviePlayerController *player = [playerViewController moviePlayer]; 

    CGRect playerFrame = CGRectMake(20, 20, self.view.frame.size.width - 40, self.view.frame.size.height - 40); 
    player.view.frame = playerFrame; 
    [self.view addSubview:player.view]; 
    [player play]; 

и есть movieFinishedCallback: метод Код:


    - (void) movieFinishedCallback:(NSNotification*) aNotification { 
    MPMoviePlayerController *player = [aNotification object]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self 
                name:MPMoviePlayerPlaybackDidFinishNotification 
                object:player]; 
    [player.view removeFromSuperview]; 
    [player release]; 
    player = nil; 

} 

Может кто-нибудь помочь мне с этим? Я прочитал много тем, связанных с этой проблемой, но не нашел решения.

+0

Это не ответит на ваш вопрос, но в вашем коде есть ошибка - строка, в которой говорится, что `player release` должна быть` self.videoPlayerController = nil`. В противном случае, вы освобождаете игрока, но сохраняете указатель на него (очень плохо!) – deanWombourne 2010-12-16 16:53:13

ответ

0

Ваш код выглядит хорошо - ваши релизы соответствуют вашим сохраняет и т.д.

Столкнулись это инструменты - то есть это, безусловно, утечка? Откуда вы знаете, что память не освобождается?

Нет ничего плохого в рамке воспроизведения видео, сохраняющей ваше кеш-видео, пока он освобождает память, если вы запустили короткое замыкание (то есть получите предупреждение о низкой памяти). Попробуйте запустить его в симуляторе и имитировать предупреждение о памяти - я уверен, что память будет выпущена.

Кроме того, вы не знаете, будет ли он автореализован в любой момент.

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

+0

Я запустил Инструменты. И если видео останавливается, размер выделенной памяти не уменьшается. Я имею в виду, если размер выделенной памяти при воспроизведении видео составляет 20 МБ, то после завершения видео размер выделенной памяти по-прежнему составляет 20 Мб. – 2010-12-16 17:06:55

Смежные вопросы