如果我加载一个笔尖而不将 xib 中的文件所有者作为 -loadNibNamed 中的所有者传递:所有者:
Posted
技术标签:
【中文标题】如果我加载一个笔尖而不将 xib 中的文件所有者作为 -loadNibNamed 中的所有者传递:所有者:【英文标题】:What happens if I load a nib w/o passing the file owner in the xib as the owner in -loadNibNamed: owner: 【发布时间】:2015-06-16 22:23:38 【问题描述】:我最近才知道 xib 的文件所有者不必是 NSWindowController
或 NSViewController
(不知道我为什么这么认为)。
所以我明白这是事情发生的顺序:
实例化了一个对象(使用 MVC,控制器)。出口 属性没有连接,并且指向nil
必须用-initWithNibNamed
初始化笔尖(并且将
在访问view
或window
时加载)或w/
-loadNibNamed
(将初始化然后一起加载笔尖)
笔尖初始化后,所有插座都已连接
-awakeFromNib
在控制器上被调用
但现在对我来说没有意义的是,为什么我在 -loadNibNamed
调用中指定笔尖的所有者甚至很重要。
BOOL effectsXibLoaded = [[NSBundle mainBundle] loadNibNamed:@"Effects"
owner:self.effectsController
topLevelObjects:nil];
我这么说是因为我想是因为我们在nib
中指定了文件所有者是谁——因此当nib
被初始化时,它应该知道将它的出口连接到谁对吗?
或者在-loadNibNamed
中指定owner
只是将另一个对象添加到owners
列表的一种方式(如果这是一件事?)。我想只有一位所有者收到来自一位nib
的-awakeFromNib
电话,但我不确定。
也就是说,如果我指定owner
,当nib
唤醒时,它会通知说owner
,以及xib
中指定的owner
?
另外我对我对事情执行顺序的理解没有信心,所以如果我需要更正,请不要犹豫
【问题讨论】:
【参考方案1】:xib 中的所有者是一个类。
loadNibNamed
中的所有者是一个实例。
NSApplicationMain
有一些神奇之处,它计算出应用程序委托类,创建一个实例,使其成为主 nib 的所有者,并将该实例设置为应用程序的委托......但这里没有任何内容表明如果您不先分配初始化一个,则将生成指定为文件所有者的类的实例...
【讨论】:
以上是关于如果我加载一个笔尖而不将 xib 中的文件所有者作为 -loadNibNamed 中的所有者传递:所有者:的主要内容,如果未能解决你的问题,请参考以下文章