这里比较的是 Windows 平台的 C/C++ 开发与 macOS 平台的  Cocoa 开发。

1Windows 平台的 Win32 API 主要是操作系统接口,而 macOS 平台的 Cocoa 不但包含操作系统接口,还包括操作系统提供的扩展功能模块和应用开发框架,差不多相当于 Windows 平台的 Win32 API + COM + MFC

2、二者实现相同的功能采用的方法往往不同。例如扩展现有模块的功能,Windows 的方法主要是窗口子类化(C)或继承(C++),而 macOS  delegate. Delegate  callback 有些像,但不一样,callback 主要用来通知,而 delegate 涵盖了通知的功能,再加上修改或扩展模块现有行为的接口,不用继承却实现了与继承相同的效果。再比如 Windows 里把当前可以接收键盘输入的窗口叫做拥有 focus”,而 macOS 把当前可以接收键盘输入的 view 叫做窗口的 first responder”,实际基本是一个意思。

3Windows  macOS 对接口兼容性的理念不同。Windows(尤其是早期)认为新接口应该尽量兼容老接口,保证老接口不失效。macOS 认为老接口该废弃就废弃,新的比老的好。

4C++COM  Objective-C 的比较

Windows 使用C/C++作为主要开发语言,C/C++的好处是运行效率高,但缺点也很明显,就是几乎没有 runtime 基础设施,例如运行时想查询一个 class 有哪些子类,有哪些成员函数,C/C++完全没有提供。这对操作系统的模块化和扩展性很不利,于是微软搞了COM技术,就是定义一套二进制接口规范来补足C/C++ runtime 方面的短板。现在来看,COM也算是成功的技术,但对开发者来说实在算不上友好,谁用谁头大。在 macOS 平台,runtime 根本不是问题,因为 Objective-C 本身就具备极强的 runtime 能力,操作系统只需要利用好 Objective-C 的能力开放接口就好了。

5、编程资料的丰富程度

 微软在编程接口宣传教育方面做的十分出色,经典的 Windows 编程书籍不胜枚举,在这方面苹果完全无法相比,后来借助手机赛道才扳回一城。

6、总结起来,macOS 操作系统提供的功能相比 Windows 来说更丰富、更高阶(例如动画功能),再加上编程资料较少,所以学习 Cocoa 的入门时间会相对长一些。

友情链接

­