微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通知中心的工作原理

如何解决通知中心的工作原理

通过添加它,

class A {

init{
NotificationCenter.default.addobserver(self,selector: #selector(self.getData),name: NSNotification.Name(rawValue: "notify"),object: nil)
}

}

如果发生了一个名为“ notify”的事件,则通知中心可以在A的实例中执行“ self.getData()”。

但是我不明白它是如何工作的。 NotificationCenter存储A的实例时,它将获得实例类型为“ Any”而不是“ A”。

我认为,如果NotificationCenter尝试调用函数“ getData()”,它应该会这样做,

let a = instance as! A

a.getData()

但这太奇怪了……如果有人解释它是如何工作的,我将非常感激。

谢谢!

解决方法

NotificationCenter使用Objective C运行时发送消息,这就是为什么要传递选择器,并且选择器必须标记为@objc的原因。

在类型方面,Objective C运行时要轻松得多。它不知道A是什么,只是知道它必须向其发送消息getData,并希望A将知道该怎么做。

在Objective C中改进选择器之前,您将选择器的名称作为字符串传递,并且任何错字都将导致崩溃,因为A不知道getDaya是什么(例如)

改进了它们,以便在编译代码时进行检查,但是底层机制没有改变。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。