有人可以以人类可以理解的方式解释什么是“出口”吗?
7 回答
它是一个显示在 Interface Builder 中的实例变量,因此您可以使用 IB 将另一个对象插入到插座中。
当您加载笔尖时,笔尖加载系统将发挥必要的作用,以确保正确的对象出现在每个插座中。
编辑:我打算围绕这张图片写一篇完整的博客文章(完成图片后我改变了主意),但即使是单独的,它也应该有助于澄清人们的出路。干得好:
(来源:boredzo.org)
从代码的角度来看,IBOutlet 只是对 Interface Builder 的提示。它实际上是一个编译成的宏,嗯,什么都没有。即编译器在编译时完全删除。
但是 Interface Builder 可以扫描您的代码以查找 IBOutlet,因此当您右键单击 IB 中的对象时,您可以看到可以连接到其他对象的所有插座。
替代文字 http://img27.imageshack.us/img27/5512/picture820090228.png
在这个例子中,delegate是 UIApplication 的成员变量,也是一个 IBOutlet。
我只是认为它是一个指向 UI 控件的指针。一旦我在脑海中建立了这种心理联系,它就变得有意义了。
我会说它们是将您的用户界面对象连接到使用它们的代码的桥梁。顾名思义,它们提供了一个将用户界面“插入”到代码中的位置。
IBOutlet 关键字定义如下:
#ifndef IBOutlet
#define IBOutlet
#endif
就编译器而言,IBOutlet 完全没有做任何事情。它的唯一目的是作为一个提示,告诉 Interface Builder 这是一个实例变量,我们将连接到 nib 中的对象。您创建并希望连接到 nib 文件中的对象的任何实例变量必须以 IBOutlet 关键字开头。
IBOutlet
是一个符号,向 Interface Builder 指示对象实例变量定义为
IBOutlet id ivar_name;
应该作为关联类的实例的出口来呈现。这允许您在 Interface Builder 中以图形方式连接对象,以便在加载 NIB 后(即,当向对象发送-awakeFromNib
消息时),ivar_name 的值将是指向您在 Interface Builder 中选择作为出口值的对象的指针。
从 Objective-C 语言的角度来看,IBOutlet
没有任何意义。
出口是您的代码(在 X 代码中)中的一个实例变量,可以为它分配对用户界面对象的引用(在 Interface Builder 中)。您将用户界面对象插入到实例变量中。分配在 Interface Builder 创建的 NIB 文件中指定。