gpt4 book ai didi

ios - 通过[[NSNotificationCenter defaultCenter] postNotificationName]方法直接传递对象是否危险?

转载 作者:行者123 更新时间:2023-12-01 17:50:10 26 4
gpt4 key购买 nike

我正在编写一个SDK,并寻找通过NSNotification发送对象的最佳实践。

Apple和包括this在内的一些线程指示object中的postNotificationNamer参数应该是通知的发送方,在大多数情况下为self。并且您的自定义对象应通过userInfo NSDictionary传递。从苹果文档:

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

例如,不适当的做法是:

[[NSNotificationCenter defaultCenter] postNotificationName:@"myNotification" 
object:myObject];

推荐的方法是:
NSDictionary* userInfo = @{@"myMessage": myObject};
[[NSNotificationCenter defaultCenter] postNotificationName:@"myNotification"
object:self
userInfo:userInfo];

我已经尝试了两种方法,它们都工作良好。问题是,使用前一种方法是否有风险?在我的情况下,我对通知的发件人不感兴趣,但是使用后一种方法会在我要发送的实际对象周围引入一个附加包装器( NSDicionary)。

最佳答案

使用对象参数并不危险,但是记住NSNotificationCenter在内部使用该参数来决定某些事情。因此,如果您的代码取决于以特定顺序或特定队列运行的事物,则可能会使表现出意外。
这是NSNotificationCenter Class Reference的相关报价:

要将其通知添加到操作队列的对象。
如果您输入nil,则通知中心不会使用通知的发件人来决定是否将屏蔽添加到操作队列中。

我会建议您将userInfo用作预期的,但这并不危险。

关于ios - 通过[[NSNotificationCenter defaultCenter] postNotificationName]方法直接传递对象是否危险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33635445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com