MPMoviePlayerController中的内存泄漏

时间:2011-03-06 00:41:18

标签: iphone objective-c ios4

有人能告诉我为什么在播放视频时我会在乐器中显示内存泄漏吗? 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 :(得分:0)

[mp release];行不需要在if语句中。 在Objective-C中,您可以向nil发送消息。因此,如果您的对象未分配,则该行不会崩溃,因为init方法将返回nil

也许这就是为什么仪器会报告内存泄漏的原因,因为无法确保您的状况得到满足。

但是你的代码似乎是有效的。 同时检查您的属性,copyretain

答案 1 :(得分:0)

仪器确实会告诉你哪一行泄漏了内存,所以你可能只需要记下线并告诉我们。事实上,我认为整个if语句可以放在外面。