Objective-C

联合创作 · 2023-10-01 11:17

Objective-C,通常写作 ObjC 和较少用的 Objective C Obj-C,是扩充 C 的面向对象编程语言。它主要使用于 Mac OS X 和 GNUstep 这两个使用 OpenStep 标准的系统,而在 NeXTSTEP 和 OpenStep 中它更是基本语言。Objective-C 可以在 gcc 运作的系统写和编译,因为 gcc 含 Objective-C 的编译器。

Objective-C 是非常「实际」的语言。它使用一个用 C 写成、很小的运行库,只会令应用程序的大小增加很小,和大部分 OO 系统使用极大的 VM 执行时间会取代了整个系统的运作相反。ObjC 写成的程序通常不会比其原始码大很多。而其函式库(通常没附在软件发行本)亦和 Smalltalk 系统要使用极大的存储器来开启一个窗口的情况相反。

Objective-C 的最初版本并不支持垃圾回收。在当时这是争论的焦点之一,很多人考虑到 Smalltalk 回收时有漫长的「死亡时间」,令整个系统失去功用。Objective-C 为避免此问题才不拥有这个功能。虽然某些第三方版本已加入这个功能(尤是 GNUstep), Apple 在其 Mac OS X 10.3中仍未引入这个功能。

另一个问题是 ObjC 不包括命名空间机制(namespace mechanism)。取而代之的是程序设计师必须在其类别名称加上前缀,时常引致冲突。在2004年,在 Cocoa 编程环境中,所有 Mac OS X 类别和函式均有「NS」作为前缀,例如 NSObject 或 NSButton 来清楚分辨它们属于 Mac OS X 核心;使用「NS」是由于这些类别的名称在 NeXTSTEP 开发时定下。

虽然 Objective-C 是 C 的超集,但它也不视 C 的基本型别为第一级的对象。

和 C++不同,Objective-C 不支援运算子多载(它不支持ad-hoc多型)。亦与 C++不同,但和 Java 相同,Objective-C 只容许物件继承一个类别(不设多重继承)。Categories 和 protocols 不但可以提供很多多重继承的好处,而且没有很多缺点,例如额外执行时间过重和二进制不兼容。

 

浏览 7
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报