查询Xcode文件所有者和@property

时间:2012-04-15 04:50:37

标签: objective-c ios

我有两个关于Xcode的基本问题;我来自Windows背景,主要是C#中的代码。

书上的第一个示例项目让我创建一个单视图应用程序,在视图上放置一个标签和按钮;拖动创造开始和行动;最后在.m文件中,在按钮操作上编写代码单击以更改label.text。就是这样:没有设置文件所有者或@property

下一个例子,还添加了一个文本框和label.text,用textBox值更新;在这里我注意到了

  • (BOOL)textFieldShouldReturn:(UITextField *)textField {}
如果我不将textBox拖到FileOwner,

不会引发;表示委托处理,我需要连接到fileOwner。这个假设是否正确? 在另一个例子中,教程实际上向我展示了将按钮连接到fileOwner - 为什么我需要它?

下一个问题:在第一个例子中,我可以在不设置@property的情况下更改label.text;我也可以从第二个例子中读取textBox。在另一个例子中,它使用@propery代码 - 我对@property的理解是它就像c#中的getter / setter;在c#中,我可以为没有任何其他设置的textArea获取或设置.text方法;那么为何/何时使用@property。

我确信这很简单,但我想我可能会将它与c#和vb进行过多的比较。

更新:我试图查看其他三本书,但它们都没有解释为什么我要做某些事情(即链接到FileOwner)。我在FileOwner上猜了一下,这是在玩代码之后;但我不明白为什么一个按钮必须链接到fileOwner。如果我拖动它来创建一个事件我还需要做什么呢?

对于@property我读原子/非原子,零售,我理解;我不明白的是,如果我能读/写标签,textArea,为什么我需要@property?

改述问题:

如果我能得到/设置label.text = @“你好”;为什么我会创建一个@propery并为该标签合成?或者用户输入的textArea?

下一步:教程为什么要求我向fileOwner添加一个按钮?

1 个答案:

答案 0 :(得分:0)

这种编程范例并不是ios独有的(如标签所示),甚至不是Objective-C。委托范例存在,以便您可以自定义类的行为而无需修改原始类。因此,对于某些逻辑,对象将调用其委托来获取有关如何继续的说明。

C#属性和objective-c属性几乎相同。两者都依赖于底层的getter和setter方法来操纵类中存储的值(私有或受保护的)。你可以通过手动getter和setter方法实现同样的目标(这就是大多数老式的C程序员在他们开始提取objective-c时所做的事情,据我所知),但你会丢失一些叫做KVO的东西(密钥 - 价值观察)。这是objective-c中的一个系统,它允许您在更改属性值时通过事件进行监视。你也会有一堆无意义的代码......没有人需要20个函数,这些函数都只是设置一个成员变量,因此在C#中有一个编译器的快捷方式。在C#中,这是{ get; set; }模式,在Objective-C中,它是@synthesize模式。

因此,对于上面的示例,text是文本字段的属性,textFieldShouldReturn是行为。自定义行为主要由委托对象处理。 C#也有代表,我相信你知道。它们就像函数指针一样,允许您将函数设置为变量。 Objective-c委托行为就像通过代理对象(通常是ViewController,但通常不是任何方式)将整组函数设置为变量(其中一些是可选的,其中一些不是)。

我希望这能为你解决问题,我并不擅长简单地处理事情。我也是在Objective-C之前来自C#背景,这就是为什么这个问题让我感兴趣。