ios5 – iOS 5释放了一个AVPlayerItem实例

当我尝试从我的iPhone(位于documentsDirectory)中播放视频时,使用iOS 5时出现以下错误,而iOS 4.3正常工作时:

AVPlayerItem类的实例0x168da0已取消分配,而键值观察者仍在其中注册.观察信息被泄露,甚至可能被错误地附加到其他物体上.在NSKVODeallocateBreak上设置断点以在调试器中停止.这是目前的观察信息:
(
上下文:0x0,属性:0x10b570>
上下文:0x0,属性:0x117ab0>

这是代码提取

MPMoviePlayerController *moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:[appDelegate.mediaManager loadVideo:[element valueForAttributeNamed:@"value"]]];  

        //create a NSNotificationCenter which call moviePlaybackComplete function when video playback finished
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlaybackComplete:) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayerController];  

        //display the moviePlayer view
        [self.view addSubview:moviePlayerController.view];
        moviePlayerController.fullscreen = YES;  
        [moviePlayerController play];

解决方法

编辑:在发布下面的答案后,我注意到,无论何时重新分配控制器,错误都会在旧控制器自动解除分配时返回,即使我自己也没有设置任何通知处理程序.由于失败来自MP框架内的代码,我想说这似乎是一个操作系统错误.

我使用ARC在基于故事板的iOS 5项目中遇到了同样的问题.问题是在堆栈上使用临时变量来引用电影控制器 – 在我的例子中,我假设与ARC进行了交互,但它可能比这更基本.在任何情况下,看起来好像过早地释放/丢失了某些内容(例如,当发生播放错误时)并且日志会被您描述的输出类型填充.

将影片控制器引用存储在拥有类中定义的属性解决了这个问题;即:

@interface MyClass
@property ( strong,nonatomic ) MPMoviePlayerViewController * movieController;
@end

@@implementation MyClass
@synthesize movieController = _movieController;

// ...then later,this:
//
// MPMoviePlayerController *moviePlayerController = [...];
//
// ...becomes:

self.movieController = [...];

如果您正在使用属性的合成访问器,那么无论您是使用手动还是自动引用计数,生成的setter方法都应该在设置新的电影控制器(如果有)之前正确解除分配.

作为脚注,如果你在MPMoviePlayerPlaybackDidFinishNotification通知处理程序中手动(例如)dealloc /’unreference'(set-to-nil)属性,那么你可能会注意到错误返回.所以不要这样做:-)

相关文章

背景 前端时间产品经理决定使用百度统计,使得 工程B 中原统计sdk-友盟统计,需要被去除。之前尝试去除...
结论: alloc负责分配内存和创建对象对应的isa指针; init只是返回alloc生成的对象。 所以alloc后,多次...
更新 如果UI愿意把启动图切割成n份,按一定约束在launchscreen.storyboard中进行排版,启动图效果会更好...
最近在看一本书《Effective OC 2.0》,今天看到有个tip是OC适中循环各自优劣性,作者最终推荐此块循环。...
// // ViewController.m // paintCodeTestOC //gif // Created by LongMa on 2019/7/25. // #import &a...
背景介绍 一般情况下,出于省电、权限、合理性等因素考虑,给人的感觉是很多奇怪的需求安卓可以实现,但...