在NSNotification的addObserver函数中澄清notificationSender的用途

时间:2016-01-15 07:12:00

标签: ios swift avfoundation avplayer nsnotificationcenter

有人可以在notificationSender的{​​{1}}函数中澄清addObserver的目的吗?

以下是Apple文档的解释:

NSNotification

我们使用通知在视频结束时进行回复。代码:

notificationSender
The object whose notifications the observer wants to receive; that is, only notifications sent by this sender are delivered to the observer.
If you pass nil, the notification center doesn’t use a notification’s sender to decide whether to deliver it to the observer.

其中NSNotificationCenter.defaultCenter().removeObserver(self, name: AVPlayerItemDidPlayToEndTimeNotification, object: playerItem) 包含相关视频。但是,为playerItem传递nil似乎没有明显效果。

我们使用object代替nil会更好,因为我们不需要创建另一个类变量。

使用playerItem的风险是什么,以及使用nil的优势是什么?

1 个答案:

答案 0 :(得分:0)

notificationSender具体相关的唯一原因是,如果您选择了通知名称,则其他对象(您不想收听)将发送给您。指定notificationSender类似于委托关系,将其保留为nil意味着绝对任何对象都可以向您发送具有相同字符串的通知,并且您将处理它。

在实践中,只要您选择唯一的通知字符串,这就很少成为问题。您会看到人们正是因为这个原因而使用com.my.app.name.notificationkMyAppNotification之类的内容。

至于你链接的特定代码行,我实际上并不知道实现细节,但我假设你添加了一个指向一个对象的notificationSender属性的监听器,你还需要删除具有notificationSender属性集的同一个侦听器,否则会因为不删除观察者而导致内存泄漏。但是我必须再次阅读文档来解决这个问题。