【问题标题】:What's Difference between NSNotification 'object' and 'userInfo'?NSNotification 'object' 和 'userInfo' 有什么区别?
【发布时间】:2015-02-16 10:02:28
【问题描述】:

NSNotificationobjectuserInfo有什么区别?

当我发布带有参数的通知时,我可以使用objectuserInfos 来执行此操作。但是我不知道这两种方式有什么区别。

使用userInfo 有什么好处吗?还是使用object 就够了?

【问题讨论】:

  • 如果您查看NSNotificationuserInfos 的文档,您会发现object 是通知发送者,userInfos 包含其他信息。
  • object 也可以包含其他信息。有区别吗?

标签: ios nsnotification


【解决方案1】:

object 表示发布通知的对象。 userInfo 包含接收对象/函数的附加信息/数据。

根据NSNotificationCenter Class Reference

postNotificationName:object:userInfo:

创建具有给定名称、发件人和信息的通知,并 将其发布给接收者。

声明

斯威夫特

func postNotificationName(_ notificationName: String, object notificationSender: AnyObject?, userInfo userInfo: [NSObject : AnyObject]?)

Objective-C

- (void)postNotificationName:(NSString *)notificationName object:(id)notificationSender userInfo:(NSDictionary *)userInfo

参数

notificationName

通知的名称。

notificationSender

发布通知的对象。

userInfo

关于通知的信息。可能为零。

讨论

此方法是发布通知的首选方法。

【讨论】:

  • 谢谢,但我想知道如果我使用object 发送附加信息会有什么“危险”?
【解决方案2】:

如果您定义一个对象,您可以过滤仅由该对象发送的通知。例如,如果您注册通知,将对象指定为 notificationSender,即使通知名称与其他已发布通知的名称相同,您也只能从该对象获得通知:

- (void)addObserver:(id)notificationObserver
       selector:(SEL)notificationSelector
           name:(NSString *)notificationName
         object:(id)notificationSender

这是来自 Apple 文档:

notificationSender 观察者想要其通知的对象 接受;也就是说,只有这个发件人发送的通知是 传递给观察者。

如果你传递 nil,通知中心不使用通知的 sender 决定是否将其交付给观察者。

【讨论】:

    【解决方案3】:

    使用 NSNotification 对象时,您需要熟悉 userInfo 字典,它提供对接收者可能感兴趣的任何其他对象的访问。如果您在多个对象上使用相同的通知,了解对象方法也可能会有所帮助。

    更多详情请点击此链接。

    http://iosdevelopertips.com/cocoa/nsnotification-userinfo-and-object-methods.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-31
      • 2018-06-20
      • 2011-08-12
      • 1970-01-01
      • 2019-12-06
      • 2013-04-11
      • 2011-11-25
      相关资源
      最近更新 更多