Cocoa C 语言编程?

问题描述 投票:0回答:4

我想开始在 Mac 上编程。我有一些问题:

  • 我不太喜欢 Objective-C,但我对 C 有所了解,我读到 Objective-C 是 C 的“方言”——是否可以用 C 进行编程并使用 Mac OS 提供的所有库和框架(这是可可,对吧?)?

  • 是否可以在 XCode 的 GUI Builder 中绘制 GUI,然后用纯 C 填充逻辑?

  • 如果我想使用 Scintilla - 如何将其文本编辑组件“加载”到 GUI 构建器的窗口中?我如何访问它的文本缓冲区?还有活动?

objective-c c cocoa
4个回答
11
投票

学习 Objective-C 就可以了。 这并不难;比 C++ 等简单得多。对象模型与 Java 或 SmallTalk 极其相似。

整个 Cocoa 的 API 堆栈都是 Objective-C 语言,文档都是 Objective-C 语言,许多设计模式(KVO、KVC、委托)本质上都是 Objective-C 主义,所有示例都是 Objective-C 语言.

无论如何,你都必须具备 Objective-C 的应用知识才能有效地对系统进行编程。 任何避免 Objective-C 的尝试只会让你的工作变得更加困难,产生难以维护的代码,并大大减少社区中可以提供帮助的人员数量。


7
投票

当然,通过直接与运行时交互。这意味着您将做很多

objc_msgSend()
等事情。这将是非常痛苦的,你还不如学习 Objective-C 语法并完成它。 (我明确地记下了语法,因为您仍然需要学习 objc 的工作方式才能使用 C API)。


2
投票

首先我最没有帮助的一点是:在没有听说过它的情况下,根据其网站 Scintilla 适用于 win32 和 GTK+。由于我相信仍然没有 GTK+ 的 Cocoa 本机版本,因此无法在 Cocoa 程序中使用 Scintilla 组件。 OS X 不是基于 X11(或 Win32,就此而言)。

Objective-C 在 C 的基础上添加了 Smalltalk 风格的对象和动态调度。但是,它是一个严格的超集,因此 C 代码是可以直接调用的。各种 GUI 组件依赖于 Objective-C 的动态、反射特性,因此无法直接调用 C 代码。然而,整个工具包是围绕模型-视图-控制器范例构建的。在 Interface Builder 中设计视图,在 Objective-C 中编写控制器的薄垫片,其作用只不过是调用适当的 C 函数,然后完全用 C 编写模型,这是非常可行的。C 代码可以调用 Objective-C 代码,因此您可以根据需要包装任意数量的系统对象。

所以这对你的第二个要点来说几乎是“是”。同样相关的是,尽管 Objective-C 源自 C,但 Apple 已使 C++ 完全可调用(搜索 Objective-C++),因此这也是一种选择。

非常值得研究的是核心基础。 OS X 最初支持两种顶级编程环境——Cocoa 和 Carbon。 Cocoa 是 Objective-C,Carbon 是带有一堆遗留支持库的 C(现在已弃用,不提供 64 位运行时)。为了支持这两者,许多核心系统功能都通过最低级别的 C 接口公开,包括所有集合、字符串和其他相对原始的对象。许多其他对性能至关重要的事情,如核心文本、核心图形等,通常也通过直接的 C 接口完成,即使您对 Objective-C 非常热衷。


0
投票

有一个基于 C 的 API,用于 Mac OS X 上的 UI 编程,称为 Carbon。如果你真的无法忍受 Objective-C,我会从这里开始。许多 Cocoa 类和 API 都有相应的 Carbon 数据类型等,反之亦然,但不是全部。公平警告,Carbon 被认为是“遗留”API,随着时间的推移,它可能会继续被边缘化。许多 Carbon API 不适用于 example

的 64 位应用程序

Cocoa 具体来说是一个基于 Objective-C 的 API,如果可能的话,从 C 使用它会很尴尬和困难。它需要一些 Objective-C 运行时 API 和可能的内部结构知识,或者以其他方式编写一堆包装器。

© www.soinside.com 2019 - 2024. All rights reserved.