我在一个界面中使用了AVPlayer 可是当我返回上一个界面时,视频还有声音,并且内存没有释放, 这是我得remove observer代码
[[_player currentItem] removeObserver:self forKeyPath:@"loadedTimeRanges" context:nil];
[[_player currentItem] removeObserver:self forKeyPath:@"status" context:nil];
[_player removeObserver:self forKeyPath:@"rate" context:LSPlayer];调试了几次 是status 这个地方没有释放掉。 导致不能自动调用dealloc
纠结了很久了, 请各位大牛 帮忙看看!! 感激不尽~
解决方案 »
- ziparchive 如何正确解压带以下字符的文件?
- 关于IOS开发中新浪微博发表分享失败的一些问题,求解。。。
- IOS NSCalendar里一个月的第一天成了上个月的最后一天(如:2012/11/15 该日期所在月份的第一天为 2012/10/31)?
- xcode 点击按钮使label自增1?可是现在却增加4?
- iPad iPhone能创建守护进程吗?
- iPhone/iPad中可以访问访问EJB吗?
- iphone如何调用外部程序打开一个pdf文件
- mac上安装ios
- IOS内存泄漏分类
- 保存照片时如何使用自定义名称或者保存后获取系统定义的照片名字
- view的创建和加载这两个说法有区别么?
- ios中的 javascriptcore问题
我怀疑是其他方面的原因
{
//释放监控
[self releaseObserver];
//释放player
[self releasePlayer];
}-(void)releaseObserver
{
[player pause];
[player.currentItem seekToTime:kCMTimeZero];
@try {
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"AVPlayerItemDidPlayToEndTimeNotification" object:[player currentItem]];
[[NSNotificationCenter defaultCenter] removeObserver:self];
[player removeTimeObserver:timeObserver];
timeObserver = nil;
[player removeObserver:self forKeyPath:@"rate" context:nil];
if (player.currentItem) {
[player.currentItem removeObserver:self forKeyPath:@"status"];
[player.currentItem removeObserver:self forKeyPath:@"loadedTimeRanges"];
}
[player removeObserver:self forKeyPath:@"currentItem"];
}
@catch (NSException *exception) {
// UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"释放失败" message:[NSString stringWithFormat:@"%@",exception] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
// [alert show];
}
}-(void)releasePlayer
{
[player pause];
player = nil;
}
我是这么释放的,这个东西确实挺蛋疼的
不能自己手动调用 dealloc,你的情况应该是这个 Player 所在的 View 被强引用了,你去 Player 的所在 View 的 dealloc 里下断点,看有没有释放,如果没有的话,就说明是 View 内存泄漏了,在去 View 所在的 ViewController 的 dealloc 方法里下断点,看 ViewController 有没有释放