什么描述了一个;“出口”;最好的objective-c/可可?

什么描述了一个;“出口”;最好的objective-c/可可?,objective-c,cocoa,interface-builder,Objective C,Cocoa,Interface Builder,有人能用一种人类可以理解的方式解释“出口”是什么吗?我想说,它们是连接用户界面对象和使用它们的代码的桥梁。顾名思义,它们提供了将UI“插入”到代码中的位置。它是一个实例变量,显示在Interface Builder中,因此您可以使用IB将另一个对象插入插座 当您加载笔尖时,笔尖加载系统将执行必要的魔法,以确保每个插座中都显示正确的对象 编辑:我本打算围绕这张图片写一篇完整的博文(完成这张图片后我改变了主意),但即使是独自一人,这也应该有助于澄清人们的出路。给你: (来源:)我只是将其视为指向U

有人能用一种人类可以理解的方式解释“出口”是什么吗?

我想说,它们是连接用户界面对象和使用它们的代码的桥梁。顾名思义,它们提供了将UI“插入”到代码中的位置。

它是一个实例变量,显示在Interface Builder中,因此您可以使用IB将另一个对象插入插座

当您加载笔尖时,笔尖加载系统将执行必要的魔法,以确保每个插座中都显示正确的对象

编辑:我本打算围绕这张图片写一篇完整的博文(完成这张图片后我改变了主意),但即使是独自一人,这也应该有助于澄清人们的出路。给你:



(来源:)

我只是将其视为指向UI控件的指针。一旦我在脑海中建立了这种心理联系,它就有了意义。

IBOutlet
是一个符号,它向接口生成器指示对象实例变量

IBOutlet id ivar_name;
应显示为关联类实例的出口。这允许您以图形方式连接Interface Builder中的对象,以便在加载NIB后(即,当对象发送
-awakeFromNib
消息时),ivar_name的值将是指向您在Interface Builder中选择作为出口值的对象的指针


从Objective-C语言的角度来看,
IBOutlet
没有任何意义。

从代码的角度来看,IBOutlet只是界面生成器的一个提示。它实际上是一个宏,编译成,嗯,什么都没有。也就是说,编译器在编译时会完全删除

但是Interface Builder可以扫描IBOutlet的代码,因此当您右键单击IB中的某个对象时,可以看到可以连接到其他对象的所有出口


在本例中,delegate是UIApplication的成员变量,也是一个IBOutlet。

IBOutlet关键字的定义如下:

#ifndef IBOutlet
#define IBOutlet
#endif
就编译器而言,IBOutlet完全不做任何事情。唯一的 其目的是作为一个提示,告诉Interface Builder这是我们正在处理的一个实例变量 将要连接到nib中的对象。您创建并希望创建的任何实例变量
连接到nib文件中的对象之前必须加上IBOutlet关键字。

outlet是代码(在X代码中)中的一个实例变量,可以为用户界面对象(在interface Builder中)指定一个引用。将用户界面对象插入实例变量。分配在Interface Builder创建的NIB文件中指定。

您所说的“以(原文如此)人性化的方式”是什么意思?您在理解哪一部分时遇到困难?你的背景是什么?在提问时,这些都是很重要的。所有可以从界面生成器(IBOutlet)中拖拽的东西。不一定。它也可以是给NSController或委托的。指向另一个对象的指针更准确。您可以尝试阅读此问题的其他答案。不,出口是单向的。另外:不,Objective-C不使用虚拟机。不,没有对每个实例的出口变量进行定期检查(这样的扫描没有意义,因为出口是单向的,即使是双向的,也没有意义)。这个系统并不像你想象的那么复杂。您确实需要阅读文档:如果A需要了解B,A是动态创建的对象(例如NSOperation),B是应用程序控制器,该怎么办?@VassilisGr:A不在nib中;这是关于nib对象的。关于这一点,您应该问一个单独的问题。
IBOutlet
变量的目的是将实例变量指向
nib
文件中的GUI对象(这样我们就可以通过编程方式访问未显式编码但通过拖动在UI中分配的元素),如果我们不使用Interface Builder,而是自己编写GUI代码,这是可以避免的,对吗?