【问题标题】:Why did UIKit or Cocoa have to be coded in Objective-C?为什么 UIKit 或 Cocoa 必须用 Objective-C 编码?
【发布时间】:2017-09-04 19:14:59
【问题描述】:

经常有一个模棱两可的声明说,objective-c 是创建 UIKit 及其前身 Cocoa 所必需的,但它很少被澄清或详细说明。与消息转发有一些模糊的关系。但是所有用户界面都会转发事件,不管它们是用什么语言编写的。所以我现在问:Objective-C 的哪些特定方面对于 UIKit 或其前身 Cocoa 的实现至关重要,而 C++ 或 Java 也无法提供?

【问题讨论】:

    标签: c++ objective-c cocoa cocoa-touch uikit


    【解决方案1】:

    方面是后期绑定和动态输入的能力。

    有几个需要的例子,但最清楚的是响应者链。尝试用 Swift 编写(不使用 Objective-C 或 Objective-C 的 RTE)。继续!

    不,不是每种语言。 IE。在 C++ 中,他们必须添加信号和槽以使该语言对现代 UI 编程有用。基本上每种没有动态绑定的语言(至少作为后备)对此都没有用处。

    • Swift 使用 Objective-C 作为动态开门器。
    • C++ 使用信号和槽。
    • C# 有委托。

    顺便说一句:GUI 的概念和动态调度的概念是同时在同一个地方发明的。也许是有原因的。

    【讨论】:

    • 好的,为什么不能用 Java 或 C 来完成响应者链?您能详细说明一下响应者链有什么特别之处吗?
    • 假设您想找到可以处理某些消息的第一响应者,例如foo:。在 Objective-C 中,你可以说,“第一个响应者是否支持 foo:?不?好的,下一个响应者是否支持 foo:?不?好的,下一个响应者是否支持 foo:?哦,支持吗?太好了!在该对象上调用 foo:。”这就是为什么当您将它们连接到 Interface Builder 中的 First Responder 时,事情才会正常工作。如果没有动态调度机制,这将变得不那么简单。
    • 你在开玩笑吧?听说过堆栈吗?将第一响应者压入堆栈,然后在 resignFirstResponder 中弹出它。
    • 没有人在开玩笑。问题是,响应者链中的项目不一定继承自同一个基类,并且可以自定义发送的消息。当然,你可以用 C 语言编写它,当然你也可以用另一种语言编写模拟器。但重点是,您必须这样做。
    • NeXTSTEP(Cocoa 的前身)创建时,Java 和 C++ 存在吗?
    猜你喜欢
    • 2010-10-09
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    相关资源
    最近更新 更多