当AVPlayer在被释放之后,Player一直监听的时间没有被移除,提示错误的解决办法

Xcode Consolu打印出来的提示:

An instance 0x156608c0 of class AVPlayer was deallocated while key value observers were still registered with it. Observation info was leaked, and may even become mistakenly attached to some other object. Set a breakpoint on NSKVODeallocateBreak to stop here in the debugger. Here‘s the current observation info:

<NSKeyValueObservationInfo 0x15634320> (

<NSKeyValueObservance 0x15597fa0: Observer: 0x15674660, Key path: currentItem, Options: <New: YES, Old: NO, Prior: NO> Context: 0x134cc4, Property: 0x1558ff20>

<NSKeyValueObservance 0x15598da0: Observer: 0x15674660, Key path: rate, Options: <New: YES, Old: NO, Prior: NO> Context: 0x134cc0, Property: 0x1559ad40>

提示的说明了AVPlayer这个类已经被释放了,当已经登记了消息监听还登记着,这可能会引起消息的泄漏,我的解决办法是在移除视图之前取消监听时间.

AVPlayer的监听部分代码:

  [self setPlayer:[AVPlayer playerWithPlayerItem:self.playerItem]];

        /* Observe the AVPlayer "currentItem" property to find out when any
         AVPlayer replaceCurrentItemWithPlayerItem: replacement will/did
         occur.*/
        [self.player addObserver:self
                      forKeyPath:kCurrentItemKey
                         options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew
                         context:AVARLDelegateDemoViewControllerCurrentItemObservationContext];

        /* Observe the AVPlayer "rate" property to update the scrubber control. */
        [self.player addObserver:self
                      forKeyPath:kRateKey    
                         options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew
                         context:AVARLDelegateDemoViewControllerRateObservationContext];

解决办法:

- (void)viewWillDisappear:(BOOL)animated{
    NSLog(@"Disappear");
    [self.player removeObserver:self forKeyPath:kRateKey context:AVARLDelegateDemoViewControllerRateObservationContext];
    [self.player removeObserver:self forKeyPath:kCurrentItemKey context:AVARLDelegateDemoViewControllerCurrentItemObservationContext];
}
时间: 2024-10-10 09:44:40

当AVPlayer在被释放之后,Player一直监听的时间没有被移除,提示错误的解决办法的相关文章

在dealloc方法中只释放引用和解除监听

对象在经历其生命周期后,最终会为系统所回收,这时候就要执行dealloc方法,在每个对象的生命周期内,此方法仅执行一次,也就是当保留基数将为0的时候. 你绝不应该自己调用dealloc方法,运行期系统会在合适的时候调用它.且,一旦调用过dealloc之后,对象就不再有效,后续方法调用均是无效的. 在dealloc中应该主要做些什么呢? 1.释放对象所拥有的引用:也就是把所有的OC对象都释放掉,ARC会通过自动生成的 .cxx_destruct方法,在dealloc中为你自动添加这些代码.对象所拥

Flash Player调试器版本的解决办法Flash Builder 找不到所需的Adobe

Flash Player调试器版本的解决办法Flash Builder 找不到所需的Adobe Flash Builder在Debug时出现的问题:Flash Builder 找不到所需的Adobe Flash Player调试器版本 解决方法: 1. 进入Flash Builder的安装目录 C:\Program Files\Adobe\Adobe Flash Builder 4.6\player\win\11.1 2. 安装flashplayer_11_plugin_debug.exe,下载

Adobe Flash Player 因过期而遭到阻止的解决办法

今天Chrome内核的所有浏览器打开网页均提示"Adobe Flash Player 因过期而遭到阻止",每一次都弹出这条信息,非常烦人. 解决办法 找到浏览器的快捷方式,右击点属性,在目标(T)中 添加 "–allow-outdated-plugins" ,表示允许过期插件运行.像我的添加之后,如下格式:注意"–allow-outdated-plugins"与".exe"有空格 C:\Users\zengwh\AppData

crs自动清除日志的时候没有释放文件,bug17034444 的解决办法

在巡检数据库的时候,发现grid的安装目录非常大,于是进行了进一步的排查,发现有很多*.l10的日志已经删除了,但是并没有释放,使用lsof命令可以看到 lsof|grep delete [[email protected] oraagent_grid]$ sudo lsof |grep delete|grep -E "oraagent|audit"oracle    18375      grid   33w      REG             253,18    105498

Javascript:DOM事件(监听鼠标点击/释放,鼠标悬停/离开等)

使用Javascript可以对HTML页面上的各种事件进行监听,如鼠标点击/释放,鼠标悬停/离开,等等. 代码整理自w3school:http://www.w3school.com.cn 效果图: 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <

Error building Player: Win32Exception: ApplicationName=‘xxxxxxxxxxxxxxxxxx//sdk\tools\zipalign.exe&#39; , CommandLine=&#39;4 的解决办法

更新了安卓SDK后,有时候Unity编译失失败,报错类似 Error building Player: Win32Exception: ApplicationName='D:/Program Files/adt-bundle-windows-x86_64-20140702/sdk\tools\zipalign.exe', CommandLine='4 "XXXXX\Temp/StagingArea/Package_unaligned.apk" "XXXXX\Temp/Stag

Adobe flash player 因过期而遭到阻止解决办法

最近使用谷歌浏览器时总是提示Adobe flash player 因过期而遭到阻止,这让人很头痛,基本上就是打开一个网页就会弹出一个提示,下面是解决办法. 问题的截图界面: 解决方法:在chrome浏览器网页输入框内输入 chrome://plugins.详细插件列表中找到Adobe flash player的插件:禁用低版本的Flash,重启浏览器即可. 如果这样还是不能解决问题,那么可以升级 Flash player for 非IE内核的版本,可以到百度软件中心下载Adobe Flash P

Xamarin.Forms 监听Button的按下、释放事件

Xamarin.Forms 监听Button的按下.释放事件 工作中遇到这样的一个需求,模仿微信发生语音功能,需要实现按钮按下开始录音,按钮释放录音结束, Xamarin.Forms中Button没有这样的事件,那么我们如何实现对Button按下,释放两个事件的监听呢? 当然这里我们再次用到了CustomRenderer,一旦遇到Xamrin.Forms无法实现的某些功能,我们就可以 通过CustomRenderer来处理. 首先:我们自定义一个VoiceRecordButton继承于Butto

异步Udp监听关闭 出现异常,访问已释放的资源或者其他错误的解决方法

在开发异步Udp程序的过程中,通常在关闭UDP的时候回遇到诸如socket 访问已释放的资源之类的异常,如下简单操作下: 1 Udp的监听 2 this.serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 3 this.serverSocket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.Reus