- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有人可以解释一下 NSNotification
的 addObserver
函数中 notificationSender
的用途吗?
这是 Apple 文档的解释:
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
包含相关视频。然而,为 object
传递 nil
似乎没有明显的效果。
我们最好使用 nil
而不是 playerItem
,因为我们不需要创建另一个类变量。
使用nil
有什么风险,使用playerItem
有什么优势?
最佳答案
指定 notificationSender
的唯一原因是您是否选择了其他对象(您不想收听的对象)将发送给您的通知名称。指定 notificationSender
类似于委托(delegate)关系,将其保留为 nil 意味着绝对任何对象都可以向您发送具有相同字符串的通知,并且您将处理它。
实际上,只要您选择唯一的通知字符串,这很少会成为问题。您会看到人们使用 com.my.app.name.notification
或 kMyAppNotification
正是出于这个原因。
至于您链接的特定代码行,我实际上不知道实现细节,但我假设您是否添加了一个监听器,其 notificationSender
属性指向一个对象,您还需要使用 notificationSender
属性集删除相同的监听器,否则不删除观察者可能会导致内存泄漏。但我必须再次阅读文档才能弄清楚这一点。
关于ios - 明确 NSNotification 的 addObserver 函数中 notificationSender 的用途,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34805955/
我有以下代码: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerWillEnt
我从mockito开始,想知道如何假装添加观察者。我想编写一个测试来确保观察者计数在函数调用后增加。 示例测试代码: MyClassUnderTest instance = new MyClassUn
在我的应用程序(游戏)中,当按下中心/主页或锁定按钮时,我试图使用 NSNotificationCenter 暂停和恢复游戏。这是我正在使用的代码: [[NSNotificationCenter de
我尝试使用 NotificationCenter.addObserver(...) 打开本地通知时启用进入特定 View 的功能 我的代码是 override func viewDidLoad() {
在 XCode 5.1(和 CorePlot 1.4)之前,有两个对象可以正常接收 NSNotifications。但是,对于 XCode 5.1.1 (Coreplot 1.5),我发现如果 add
我目前正在为大学开发一款小游戏。我有一个扩展 Observable 并实现接口(interface)的模型。 由于接口(interface)的原因,我每次都必须为我添加的每个观察者重写 addObse
我有多种操作(派生自 NSOperation)通过 Internet 进行异步查询。按照惯例,我通过观察它们的 isFinished 属性来确定它们何时完成。 当一个特定类型的操作完成时,我想使用第一
我正在尝试获取 AVPlayer timedMetadata,但永远不会调用观察者 self.metaItem!.addObserver(self, forKeyPath: "metaData", o
我需要使用 NSNotificationCenter 在新数据来自 WCSession 时更新我,以便我可以填写我的 tableview。 我在列出的每个函数上都设置了断点,但出于某种原因,它直接转到
根据我的理解,addObserver 方法的 object 参数是您要从中接收通知的对象。大多数时候,我将其视为 nil(我假设这是因为所有对象都需要指定类型的通知)。在我的特殊情况下,我在屏幕顶部和
大家好多年阅读 StackOverflow,现在我决定加入。我正在努力解决这个问题: 我有一个“Depot”实体,它有两个对多关系“Persons”和“Trucks”。我想观察在给定“Depot”对象
每当我的 UILabel 中的文本发生更改时,我都会尝试获取通知,以便我可以调整它的大小以适应新文本。这是我的代码: public class MessageContainer : UILabel {
我看过NSNotification addObserver/removeObserver 放在viewDidLoad/viewDidUnload , viewDidAppear/viewDidDisa
所以我有一个像public class Main Implements Observer{}这样声明的函数,里面有主函数public static void main(String[] args) {
我正在尝试创建让我的 View 在键盘打开后移动。但我遇到了一个非常意想不到的问题。 这是我的代码: override func viewDidLoad() { super.viewDidLo
我正在尝试从位置管理器对象向我的 viewController 发出通知。它不起作用 - addObserver 方法中的选择器未被调用。 位置管理器 Object.m 文件(具有标准分派(dispa
有没有办法获取在 NSManagedObject 上使用 addObserver:forKeyPath:options:context: 和选项 NSKeyValueChangeInsertion 添
如何在 SwiftUI 中添加 NotificationCenter.default.addObserve? 当我尝试添加观察者时出现以下错误 Argument of '#selector' refe
我已经看到如何从一些 NotificationCenter 代码使用 Publisher 过渡到 Combine,但还没有看到如何为类似的东西做到这一点: NotificationCe
我习惯于在初始化方法中加入“[NSNotificationCenter defaultCenter] addObserver”。而且我已经看到很多其他人放在 viewDidLoad 中。是否有任何说明
我是一名优秀的程序员,十分优秀!