### Objective C概述
#### 历史背景
Objective-C,作为一种面向对象的编程语言,起源于1980年代初期,由布拉德·柯斯(Brad Cox)在其创办的公司Stepstone发明。Objective-C的独特之处在于它将面向对象的概念与C语言结合,形成了一种既能保持C语言的强大和灵活性,又能享受面向对象编程优点的语言。1986年,随着柯斯出版的《面向对象编程:一种演进的方法》(Object-Oriented Programming, An Evolutionary Approach),Objective-C获得了更广泛的认知。
随后的历史转折点发生在1985年,当史蒂夫·乔布斯离开苹果并创立NeXT公司时,Objective-C成为了NeXTSTEP操作系统的开发基石,后者是一款基于Unix的、具备强大用户界面的工具包。NeXTSTEP的诞生,标志着Objective-C在实际应用中的首次大规模部署。
1986年,苹果公司虽然没有直接收购NeXT,但后续的发展中,NeXTSTEP被重新命名为Cocoa,并逐渐成为苹果操作系统的核心组件,尤其是在2001年推出的Mac OS X操作系统中,Cocoa扮演了至关重要的角色。苹果公司不仅保留了Cocoa,还免费提供了包括Cocoa在内的各种开发工具,这极大地促进了Objective-C及其生态系统的发展。
面对关于Objective-C和Cocoa是否已经过时的疑问,答案显然是否定的。Objective-C和Cocoa由一支才华横溢的团队精心打造,经历了多年的迭代和改进,已经演变成一套成熟且功能丰富的工具集,至今仍被广泛使用,尤其是在iOS和macOS的开发中,保持着强大的生命力和市场前景。
#### 语言特性
Objective-C之所以被称为非常“实际”的语言,主要体现在以下几个方面:
1. **运行库大小**:Objective-C使用一个用C语言编写的、相对较小的运行库,这意味着由Objective-C编写的程序体积不会过大,与源代码和库文件相比,增加的大小非常有限。这与Smalltalk等语言形成了鲜明对比,后者即使简单的窗口操作也可能占用大量存储空间。
2. **与C的兼容性**:Objective-C能够在现有的C编译器基础上实现,无需编写新的编译器,这使得Objective-C能够充分利用大量的现有C代码、库、工具和编程理念,降低了学习和使用的门槛。
3. **垃圾回收**:Objective-C的原始版本并不支持垃圾回收,这是为了避免Smalltalk中出现的长时间停顿问题。然而,随着技术的发展,包括GNUstep在内的多个第三方版本,以及苹果在Mac OS X 10.5中提供的版本,都加入了垃圾回收功能,提升了语言的实用性。
4. **命名空间机制的替代**:Objective-C不包含命名空间机制,而是依赖程序员在类名前添加前缀来避免命名冲突。这一做法虽然简单,但在大规模项目中可能会引起问题。苹果的解决方案是在Cocoa框架中统一使用“NS”作为前缀,如NSObject或NSButton,以此清晰地区分出属于Mac OS X核心的类。
5. **不支持运算符重载和多重继承**:Objective-C不支持C++中的运算符重载,也不允许多重继承,这一点与Java相似。但是,通过使用Categories和protocols,Objective-C可以提供多重继承的部分优势,同时避免了多重继承可能带来的复杂性和不确定性。
6. **动态运行时类型**:Objective-C采用动态运行时类型,所有方法调用本质上都是函数调用,这导致了一些常见的编译时优化(如内联函数)无法在Objective-C中实现。尽管如此,Objective-C的支持者认为,这种运行时开销正是Objective-C不应被用于底层抽象设计的原因,它更适合高层级的抽象任务。
#### HelloWorld!示例
Objective-C的Hello World程序简洁明了,展示了语言的基本结构和语法。以下是一个简单的Objective-C程序示例:
```objective-c
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSLog(@"Hello, world!");
[pool drain];
return 0;
}
```
这段代码首先导入了Foundation框架,这是Objective-C中处理基本数据类型和常用功能的核心库。`NSLog`函数用于输出字符串到控制台,`NSAutoreleasePool`则是用于管理内存释放的池子,确保程序在退出前释放了所有自动引用计数的对象,避免内存泄漏。
此外,Objective-C还支持基本的算术运算,如下所示:
```objective-c
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int sum = 0;
sum = 50 + 25;
NSLog(@"The sum of 50 and 25 is %i", sum);
[pool drain];
return 0;
}
```
在这个示例中,`sum`变量用于存储两个整数相加的结果,然后通过`NSLog`函数将结果输出到控制台,展示了Objective-C处理基本数学运算的能力。
Objective-C是一种结合了C语言的强大特性和面向对象编程范式的语言,它不仅历史悠久,而且在现代iOS和macOS开发中仍然发挥着不可替代的作用。其语言特性、历史背景以及示例代码,共同构成了Objective-C的全貌,使其成为IT领域中不可或缺的一部分。
评论0