Утечка памяти в MPMoviePlayerController - PullRequest
0 голосов
/ 06 марта 2011

Может кто-нибудь сказать мне, почему я показываю утечку памяти в инструментах при воспроизведении видео? movieURL и moviePlayer - это сохраненные синтезированные свойства, которые позже высвобождаются в dealloc. Заранее спасибо за помощь.

- (void)playMovie:(NSString *)movieString { 
NSLog(@"playMovie movieString: %@",movieString);
self.movieURL = [Utilities localMovieURLForFileName:movieString];
if (self.movieURL) {
    MPMoviePlayerController *mp = [[MPMoviePlayerController alloc] initWithContentURL:self.movieURL];
    [[mp view] setFrame: [self.view bounds]];  // frame must match parent view
    [self.containerViewController.view addSubview: [mp view]];

    if (mp)
    {
            //save the movie player object
        self.moviePlayer = mp;
        [mp release];
        [self setUpMoviePlayer];

            // Apply the user specified settings to the movie player object
            //[self setMoviePlayerUserSettings];

            // Play the movie!
        [self.moviePlayer play];
    }
}
self.movieURL = nil;

}

Ответы [ 2 ]

0 голосов
/ 06 марта 2011

Инструмент действительно сообщает вам, в какой линии произошла утечка памяти, поэтому, вероятно, вы могли бы просто определить линию и сообщить нам.На самом деле, я думаю, что весь оператор if может быть размещен снаружи.

0 голосов
/ 06 марта 2011

Строка [mp release]; не обязательно должна быть в операторе if. В Objective-C вы можете отправить сообщение на nil. Таким образом, если ваш объект не был выделен, эта строка не будет аварийно завершена, поскольку метод init вернет nil.

Может быть, поэтому Instruments сообщает об утечке памяти, поскольку не может быть уверена, что ваше условие выполнено.

Но ваш код кажется верным. Также проверяет ваши свойства, для copy или retain.

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