-2

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

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

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

  • (BOOL)textFieldShouldReturn:(UITextField *)textField {}

如果我不将 textBox 拖到 FileOwner,则不会引发;这表明对于委托处理,我需要连接到 fileOwner。这个假设正确吗?在另一个示例中,教程实际上向我展示了将按钮连接到 fileOwner - 我为什么需要它?

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

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

更新:我试图浏览其他三本书,但没有一本能真正解释我为什么要做某些事情(即链接到 FileOwner)。我在玩代码之后对 FileOwner 进行了一些猜测;但我不明白为什么必须将按钮链接到 fileOwner。如果我拖动它来创建一个事件,我还需要做什么?

对于@property,我阅读了原子/非原子,零售,我明白这一点;我不明白的是,如果我可以读/写标签 textArea,为什么我需要 @property 呢?

改写问题:

如果我可以获取/设置 label.text = @"Hello"; 为什么我要为该标签创建一个@propery 和综合?还是带有用户输入的 textArea?

下一篇:教程为什么要我给fileOwner添加一个按钮?

4

1 回答 1

0

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

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

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

我希望这可以为您解决问题,我不擅长简洁明了。在 Objective-C 之前,我也有 C# 背景,所以这就是我对这个问题感兴趣的原因。

于 2012-04-15T05:03:28.793 回答