### 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领域中不可或缺的一部分。
剩余22页未读,继续阅读
- 粉丝: 0
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 全球干旱数据集【自校准帕尔默干旱程度指数scPDSI】-190101-202312-0.5x0.5
- 基于Python实现的VAE(变分自编码器)训练算法源代码+使用说明
- 全球干旱数据集【标准化降水蒸发指数SPEI-12】-190101-202312-0.5x0.5
- C语言小游戏-五子棋-详细代码可运行
- 全球干旱数据集【标准化降水蒸发指数SPEI-03】-190101-202312-0.5x0.5
- spring boot aop记录修改前后的值demo
- 全球干旱数据集【标准化降水蒸发指数SPEI-01】-190101-202312-0.5x0.5
- ActiveReports
- vgbvdsbnjkbfnb
- effsefefeffsfwfse
评论0