gpt4 book ai didi

ios - NSNotificationCenter - 当观察到的对象被解除分配时移除观察者

转载 作者:行者123 更新时间:2023-12-01 17:53:31 25 4
gpt4 key购买 nike

我使用以下行添加一个观察者:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(itemDidFinishPlaying) name:AVPlayerItemDidPlayToEndTimeNotification object:self.playerItem];

我的观察者 ( self ) 永远不会被解除分配。

但是当用户开始播放不同的项目时,旧的 self.playerItem将被解除分配——但总是会被一个新的替换,我想继续观察。

当这种情况发生时,我的观察者作为观察者的地位会怎样?我是否需要做一些事情来停止观察已释放的对象,就像 KVO 所要求的那样?或者我会继续观察 self.playerItem处的新天体吗? ?还是我的观察者会自动“未注册”?

如果我需要移除观察者,我想知道为什么没有相应的 removeObserver使人们能够指定选择器的方法;看来我只能通过 removeObserver:(id)notificationObserver 批量删除观察者.

最佳答案

根据 NSNotificationCenter class reference :

Be sure to invoke removeObserver: or removeObserver:name:object: before notificationObserver or any object specified in addObserver:selector:name:object: is deallocated.



所以:你应该在 self.playerItem 之前注销你的观察者解除分配。

But when the user starts playing a different item, the old self.playerItem will be deallocated---but will always be replaced with a new one, which I want to continue observing.



您可以通过 nil作为 addObserver:selector:name:object: 的最后一个参数方法:

Adds an entry to the receiver’s dispatch table with an observer, a notification selector and optional criteria: notification name and sender. If you don't specify

If you pass nil, the notification center doesn’t use a notification’s sender to decide whether to deliver it to the observer.



所以你会收到通知 AVPlayerItemDidPlayToEndTimeNotification来自任何发布它的对象。

关于ios - NSNotificationCenter - 当观察到的对象被解除分配时移除观察者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22644185/

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