从同一档案发起的消息其他对象是否真的安全?

时间:2017-05-06 23:21:13

标签: ios swift

awakeFromNib(),https://developer.apple.com/reference/objectivec/nsobject/1402907-awakefromnib的文档指定

  

因为从存档中实例化对象的顺序是   不保证,您的初始化方法不应发送消息   到层次结构中的其他对象。 发送给其他对象的消息可以是   从awakeFromNib方法中安全发送

是否真的可以从awakeFromNib方法中安全地发送到其他对象的消息?虽然在调用awakeFromNib方法时会初始化同一归档中的所有对象,但无法保证awakeFromNib方法对归档中对象的调用顺序,并且对象的awakeFromNib方法的执行可以更改对象&# 39; s值。如果我们不知道另一个对象是否已经执行了awakeFromNib方法,那么如何在awakeFromNib方法中传递另一个对象真的是安全的?文档错了吗?

1 个答案:

答案 0 :(得分:1)

文档意味着在其他对象(来自存档)中发送消息是“安全的”,因为在任何对象的awakeFromNib之前,存档中的所有对象都已被实例化。调用。换句话说,可以保证您可能希望发送的目标对象实例,并且已根据其初始化程序指定的任何归档值或值设置其属性。

我想你问“如果我的awakeFromNib代码以某种方式改变了对象,因为我不知道执行的顺序,那么对其他对象发送消息是否”安全“?”。

在这种情况下,您需要编码,以便awakeFromNib调用的顺序无关紧要。这可能意味着在其他一些功能中执行操作。

这并不意味着文档不正确。在awakeFromNib中传递其他对象通常是“安全的”,但是通过改变awakeFromNib中的对象图或对象属性而实现的约束可能意味着您无法获得所需的结果。

您有责任确保不是来自笔尖本身的任何状态是无关紧要或照顾的。