【问题标题】:Objective C 'target action' in .m and 'outlet' in .h.m 中的 Objective C“目标动作”和 .h 中的“出口”
【发布时间】:2012-07-14 19:48:37
【问题描述】:

我目前正在参加斯坦福 CS193p iPhone 和 iPad 应用程序开发课程 (http://itunes.apple.com/itunes-u/ipad-iphone-application-development/id473757255),在第二堂课中,当他将计算器的按钮连接到 .m 文件时,我被难住了,他连接了显示标签 (显示计算器上的值)到.h文件...

我对整个实现和头文件的理解是,你在 header 中声明类成员并说明它们在实现中做了什么,这就是为什么这对我来说没有意义......

任何帮助将不胜感激

【问题讨论】:

    标签: objective-c ios cs193p


    【解决方案1】:

    在 Objective-C 中,.m 文件可能包含该类的 .h 文件未声明的类的方法。事实上,使用该语言的类别功能,可以有多个 .h 和 .m 定义一个类的所有方法。

    就可以连接的内容而言,关键字IBOutlet 标记属性或变量,IBAction 标记动作方法。这些只是给编辑的提示;所有的“连接”都是在运行时自动设置的。

    【讨论】:

    • 你有什么理由把它放在一个并置的地方吗?我对编程很陌生(我在学校只上过几节课)所以一个基本的解释真的很有帮助,非常感谢你的回复!
    • 许多方法只是为了帮助实现而存在,因此在标题中显示它们没有用处。完全私有的方法通常列在.m 顶部的类别中(例如@interface MyClass (MyClassInternal) ...),因此即使标题中没有提到它们,仍然可以在没有警告的情况下调用它们。在我的代码中,我也不会在 .h 中显示一个方法,如果它是自动调用的(例如dealloc;任何仅为符合协议而定义的方法;任何仅由回调方案使用的方法比如NSNotificationCenter)。
    • 好吧,这开始变得更有意义了,我实际上并没有很好地解释我的情况......在播客中,他们将 UILabel(文本标签)拖到 .h文件和 .m 文件的 IBAction (一个按钮),可能是他们没有将它们都带到 .h 文件,因为按钮将发送值(按下了什么数值按钮[这是一个 RPN 计算器程序])并且标签将只显示计算的值?
    • 类的主界面中必需的一件事是存储的数据,以及任何属性的扩展。在这种情况下,UILabel* 必须在某处被记住,因此它必须是标题 (.h) 中的字段和/或属性。另一方面,动作方法只是代码;它们通常仅由用户界面元素(而不是普通程序代码)调用,因此它们实际上不必在.h 中提供给其他任何人使用。我认为这就是为什么他们需要拖动到 .m 以将按钮与操作相关联。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多