在iOS中使用NSNotificationCenter传递userInfo数据的更好方法

时间:2016-04-13 06:03:01

标签: ios objective-c nsnotificationcenter

[[NSNotificationCenter defaultCenter] postNotificationName:@"TapNewProduct" object:self.productID];

(或)

NSDictionary *dict = @{@"productID":self.productID};

[[NSNotificationCenter defaultCenter] postNotificationName:@"TapNewProduct" object:nil userInfo:dict];

哪个是上面两个更好的方法?

4 个答案:

答案 0 :(得分:2)

您的第一个选项会滥用发件人'通知的参数因为它很简单。它会起作用,但它是不正确的。使用该参数的想法是,您可以使用它来过滤您收到的通知。如果你那样使用它就好了,但它不能传递用户信息。

所以,第二个选项是正确的。

想象一下,将来会有其他人来帮助您的项目 - 您的代码编写得越多越符合标准,他们就越容易帮助您。

答案 1 :(得分:0)

在这两种方法中,你将获得相同的输出。您将通过notification.object获取对象。 但在此,

[[NSNotificationCenter defaultCenter] postNotificationName:@"TapNewProduct" object:self.productID];

无需创建字典。它可以减少代码。

答案 2 :(得分:0)

object参数是" notificationSender",即发布通知的对象。 userInfo参数旨在包含有关通知的信息,可能为零。

More details in Apple's reference documentation

答案 3 :(得分:0)

postNotificationName:object:方法使用userInfo参数postNotificationName:object:userInfo:调用nil。所以基本上没有理由争论哪一个比另一个好。