我在文档中找不到如何userInfo
为NSNotification
. 如果您指定一个,这仅仅是一个指向内存中现有位置的指针,还是分配新内存以“携带”此数据到通知中?
如果是后者,如果要引用大字典会影响性能;如果是前者,我希望字典有多大并不重要,因为它已经在内存中。
同样在这一点上,如果字典在添加到通知之前没有保留,它的寿命是多久?我们是否可以安全地假设该通知的接收者在接收到该字典时将有权访问该字典,即使在发送通知之前该字典未被保留?
我在文档中找不到如何userInfo
为NSNotification
. 如果您指定一个,这仅仅是一个指向内存中现有位置的指针,还是分配新内存以“携带”此数据到通知中?
如果是后者,如果要引用大字典会影响性能;如果是前者,我希望字典有多大并不重要,因为它已经在内存中。
同样在这一点上,如果字典在添加到通知之前没有保留,它的寿命是多久?我们是否可以安全地假设该通知的接收者在接收到该字典时将有权访问该字典,即使在发送通知之前该字典未被保留?
我相信userInfo
提供给的对象+ (id)notificationWithName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)userInfo
被保留。而且我确信不会为 store 分配任何额外的内存userInfo
。
因此,userInfo
在未发布通知时(由该通知的所有观察者发送并处理),引用的对象将是活动的。是的,您可以假设字典(或您将提供的任何内容userInfo
)都可以在观察者中访问(当然,如果您没有过度释放它)。
来自Core Foundation 的内存管理编程指南 -> 所有权政策
实例变量和传递参数
基本规则的一个推论是,当您将一个对象传递给另一个对象(作为函数参数)时,您应该期望接收者在需要维护它时获得传递对象的所有权。