【问题标题】:IOS CS193p - Why was the IBAction connection dragged to .m file and not to .h?IOS CS193p - 为什么 IBAction 连接被拖到 .m 文件而不是 .h?
【发布时间】:2012-04-17 16:52:54
【问题描述】:

我注意到在斯坦福 CS193p 课程的计算器演示中,IBOutlet 连接被从标签拖到头文件中。但是,IBAction 连接是直接在 .m 文件中创建的。我尝试阅读文档并在 Google 上搜索,但找不到背后的原因。

我认为IBAction digitPressed 方法也应该在头文件中声明(它不应该是接口的一部分吗?)。

我显然对 Objective C 相当陌生(主要是在 Java 中工作),所以我确信我缺少一些基本的东西。

谁能解释一下?

【问题讨论】:

    标签: iphone objective-c ios cs193p


    【解决方案1】:

    在类的头文件中声明事物使它们成为公共接口的一部分。这包括在视图控制器上定义的出口和操作。

    是否应该公开某些东西是一个设计问题。一个好的原则是:只有在必须的时候。对于 ViewControllers 出口和操作,它们通常不必——因此也不应该——公开。

    通常发生的情况是,您先对公共接口应包含的内容做出一些猜测,然后(如果您是一个整洁的开发人员)在实现成熟时再次查看并删除任何不重要的内容。

    【讨论】:

    • 能够在 .m 文件中声明 IBOutlets 并在 IB 中链接它们是相当新的。演示和教程还没有全部赶上。这绝对是更好的解决方案,并且避免了非常糟糕的做法,比如修改另一个对象的 IBOutlets(你不应该这样做)。
    • @danh,你能解释一下为什么渠道和行动不必公开吗?如果这些不是公共的,视图如何在控制器中访问这些?
    • ViewController 可能是一个令人困惑的名字,如果你受过 MVC 方面的教育。正如您可能认为的那样,这不是该首字母缩略词中的两个同行配对。最好将其视为控制视图的东西。从这个意义上说,将自己的观点保密更有意义。这不是规则或课程,只是一种常见的做法。 View 是视图控制器的属性,您创建的子类通常具有它们控制的附加子视图。这种控制通常是相当绝对的,因为他们不与他人分享这种控制。让我谷歌一下以获得很好的参考,我会在这里发布。
    • developer.apple.com/library/ios/#featuredarticles/… 是我通过快速谷歌能找到的最好的东西。
    • @Rahul 我是 Objective c 的新手,但据我了解,仅在 .m 文件中定义的方法在技术上可以被任何客户端调用而不会出错,只是客户端不应该期望这些“私有”方法随着时间的推移实现相同的接口。因此,目标 c 中的公共/私有概念用于捕获和传达任何给定方法的“预期用途”,而不是“强制”其使用。如果有人知道这是不真实的,请详细说明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多