我在文档中找不到如何处理userInfo
NSNotification
字典的内存。如果你指定一个,这只是一个指向内存中现有位置的指针,还是分配了新的内存以将这些数据“携带”到通知中?
如果是后者,如果你想引用一个大字典会影响性能;如果是前者,我会期望字典有多大并不重要,因为它已经在内存中了。
同样在这一点上,如果在将字典添加到通知之前未保留字典,它会存在多长时间?我们是否可以安全地假设此通知的收件人在收到该通知时可以访问该词典,即使在发送通知之前未保留该词典?
答案 0 :(得分:0)
我相信userInfo
提供给+ (id)notificationWithName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)userInfo
的对象会被保留。我确信不会分配任何额外的内存来存储userInfo
。
因此userInfo
引用的对象将在未发布通知时处于活动状态(由该通知的所有观察者发送和处理)。是的,您可以假设字典(或您将提供的任何字典userInfo
)可以在观察者中访问(当然,如果您没有过度释放它)。
来自Memory Management Programming Guide for Core Foundation -> Ownership Policy
实例变量和传递参数
基本规则的必然结果是,当您将对象传递给另一个对象(作为函数参数)时,您应该期望接收者在需要维护传递对象时将获得所有权。