gpt4 book ai didi

ios5 - iOS 5 一个 AVPlayerItem 实例被释放

转载 作者:行者123 更新时间:2023-12-04 14:33:24 28 4
gpt4 key购买 nike

当我尝试从我的 iPhone(位于文档目录中)播放视频时,我在使用 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];

最佳答案

编辑:在发布下面的答案后,我注意到每当 Controller 被重新分配时,错误又回来了,因为旧 Controller 被自动解除分配,即使我自己绝对没有设置通知处理程序。由于故障来自 MP 框架内的代码,我会说这似乎是一个操作系统错误。

我在使用 ARC 的基于 Storyboard的 iOS 5 项目中遇到了同样的问题。问题是使用堆栈上的临时变量来引用电影 Controller - 在我的情况下,我假设与 ARC 进行交互,但它可能比这更基本。无论如何,看起来好像有些东西过早地被释放/丢失(例如,当发生播放错误时)并且日志被您描述的那种输出填满。

在我的情况下,将电影 Controller 引用存储在拥有类中定义的属性中解决了这个问题; IE:

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

@@implementation MyClass
@synthesize movieController = _movieController;

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

self.movieController = [...];

如果您对属性使用合成访问器,那么无论您是使用手动还是自动引用计数,生成的 setter 方法都应该在设置新 Controller 之前正确释放旧的电影 Controller (如果有)。

作为脚注,如果您(例如)在 MPMoviePlayerPlaybackDidFinishNotification 中手动解除分配/“取消引用”(设置为 nil)该属性通知处理程序,那么您可能会注意到错误又回来了。所以不要这样做:-)

关于ios5 - iOS 5 一个 AVPlayerItem 实例被释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8035481/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com