我在使用iOS 5 Beta随附的新xcode播放电影时遇到问题。我创建了一个简单的项目(包括情节提要和所有内容),并将此代码添加到了按钮中:
MPMoviePlayerController *moviePlayer;
NSString *path = [[NSBundle mainBundle] pathForResource:@"position" ofType:@"m4v"];
NSURL *videoURL = [NSURL fileURLWithPath:path];
moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];
//[moviePlayer setControlStyle:MPMovieControlStyleDefault];
[moviePlayer.view setFrame: self.view.bounds]; // player's frame must match parent's
[self.view addSubview: moviePlayer.view];
[moviePlayer prepareToPlay];
[moviePlayer play];
令人困惑的是,当我将代码放入使用先前版本的xcode(特别是iOS 4.3附带的版本)构建的项目中时,它可以完美地工作。
有任何想法吗?
最佳答案
是Objective-C的新手,但我会对其进行介绍。默认情况下,使用Xcode 4.2(提供针对iOS5的代码)时,新项目会启用ARC(自动引用计数)。对于您提供的代码,由于您在此代码块内声明了moviePlayer,因此当moviePlayer退出该代码块时,它会自动释放。在较旧的项目中,moviePlayer只会持续存在,可能会导致内存泄漏。我通过在类的头文件中声明moviePlayer来启用默认的Xcode 4.2 ARC设置,这意味着它仅在该类的对象实例被释放时才被释放。