有人能告诉我为什么在播放视频时我会在乐器中显示内存泄漏吗? 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;
}
答案 0 :(得分:0)
[mp release];
行不需要在if
语句中。
在Objective-C中,您可以向nil
发送消息。因此,如果您的对象未分配,则该行不会崩溃,因为init
方法将返回nil
。
也许这就是为什么仪器会报告内存泄漏的原因,因为无法确保您的状况得到满足。
但是你的代码似乎是有效的。
同时检查您的属性,copy
或retain
。
答案 1 :(得分:0)
仪器确实会告诉你哪一行泄漏了内存,所以你可能只需要记下线并告诉我们。事实上,我认为整个if语句可以放在外面。