2009-02-27 26 views
14

有人可以用人性化的理解方式解释什么是“Outlet”吗?什么描述了Objective-C/Cocoa中最好的“Outlet”?

+0

你的意思是“以一种(原文如此)人性化的理解方式?”你难以理解哪部分?你的背景是什么?提出问题时,这些对预先陈述很重要。 – 2009-02-28 03:06:46

+0

所有可以从界面构建器(IBOutlet的)拖动的东西。 – 2012-10-14 21:57:35

回答

10

我只是把它当作一个指向UI控件。一旦我在脑海中形成了这种精神联系,它就有意义了。

5

我会说他们是将用户界面对象连接到使用它们的代码的桥梁。就像名称所暗示的那样,它们提供了一个将您的UI“插入”到代码中的位置。

26

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

当您加载笔尖时,笔尖加载系统将执行必要的魔术以确保正确的对象出现在每个插座中。

编辑:我打算围绕这张图片写一篇完整的博客文章(我在完成图片后改变了主意),但即使是孤身一人,它也应该有助于为人们澄清网点。在这里你去:

The outlet relationship. http://boredzo.org/images/The-outlet-relationship-small.png

+0

+1你使用了什么绘图工具? – 2010-09-26 01:55:37

+0

Yar:Lineform。 http://freeverse.com/lineform/ – 2010-09-26 04:41:28

+0

如果A需要了解B,那么A是一个动态创建的对象(例如NSOperation),B是applicationController? – Vassilis 2011-03-26 12:22:58

3

IBOutlet是一个符号,用于指示界面生成器,一个对象实例变量delcared作为

IBOutlet id ivar_name; 

应作为相关联的类的一个实例的出口。这使您可以在Interface Builder中以图形方式连接对象,以便在加载NIB之后(即,当对象发送-awakeFromNib消息时),ivar_name的值将成为指向您在Interface Builder中选择为插座值的对象的指针。

从Objective-C语言的角度来看,IBOutlet毫无意义。

11

从代码的角度来看,IBOutlet仅为Interface Builder的提示。它实际上是一个编译成的宏,什么也没有。也就是说,编译时编译器完全删除。

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

alt text http://img27.imageshack.us/img27/5512/picture820090228.png

在这个例子中,委托是UIApplication的的成员变量,它是一个IBOutlet太。

5

的IBOutlet中关键字的定义是这样的:只要编译器而言

#ifndef IBOutlet 
#define IBOutlet 
#endif 

IBOutlet中绝对什么都不做。其唯一 的目的是作为一个提示告诉Interface Builder,这是一个实例变量,我们将 连接到笔尖中的对象。您创建的任何实例变量,并且想要连接到nib文件中的对象的所有实例变量都必须以IBOutlet关键字开头。

0

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

相关问题