简介
- OC是根据C语言所衍生出来的语言,继承了C语言的特性,是扩充C的面向对象编程语言。
- 它主要使用于Mac OS X和GNUstep这两个使用OpenStep标准的系统,而在NeXTSTEP和OpenStep中它更是基本语言。
- Objective-C可以在gcc运作的系统写和编译,因为gcc含Objective-C的编译器。
- 在MAC OS X系统下,运用苹果提供的SDK等开发工具包,可以用来做IOS开发,开发后的程序在Iphone虚拟机中进行测试,运用的主要语言为Objective-C。
- 单一继承:Objective-C不支持多重继承,(同Java和Smalltalk),而C++语言支持多重继承。
- 动态:Objective-C是动态定型(dynamicaly typed)所以它的类库比C++要容易操作。
和C++比较
Objective-C 在运行时可以允许根据字符串名字来访问方法和类,还可以动态连接和添加类。
- 学派分别。C++ 跟从面向对象编程里的Simula67(一种早期OO语言)学派;而Objecive-C属于Smalltalk学派。
- 安全性。在C++里,对象的静态类型决定你是否可以发送消息给它。Simula 67学派更安全,因为大部分错误可以在编译时查出。OC来说,由动态类型来决定。而Smalltalk学派更灵活,比如一些Smalltalk看来无误的程序拿到Simualr 67那里就无法通过。
- 关键字命名。为了避免与已有的c,C++关键字冲突,ObjectC关键字都有@开始:如:@classs,@interface,@private,@try,@catch,@protocol等。
- oc类分为2个文件,一个是.h文件,一个是.m文件:.h文件:存放类,函数的申明;类申明使用关键字@interface @end来申明;.m文件:存放类的具体实现;类实现使用关键字@implementation @end来实现;
- C++不同,Objective-C只允许单继承。
- 性能 。由于Objective-C动态运行时类型,而且所有方法都是函数调用,很多性能优化方法都不能应用于Objective-C(例如,内联函数,交互式优化,常量传递等),这使得Objective-C性能劣于类似得对象语言(C++)。
C++和Objective-C的差别,与其说时技术上的,不如说是思维方式上的。
Objective-C是C语言的超集,意指任何原始的C语言程式都可以通过Objective-C编译器而不需要修改,也允许Objective-C使用任何原始的C语言代码。最主要得区别是Objective-C在原始的C语言主题上加入面向对象的概念。
2. 发展历史
3 关于cocoa
Cocoa 是从1980年代由 NeXT 开发的编程环境 NeXTSTEP 和 OPENSTEP 演变而来,这点可由其类别之名皆以 NS 前缀(代表NeXTSTEP)看出端倪。苹果电脑公司在1996年12月收购了NeXT。开发 NeXTSTEP 和 OPENSTEP 的大量工作都转化到了 Mac OS X 中,最显而易见的部分当属 Cocoa。
但差异也存在。例如,NeXTSTEP 和 OPENSTEP 使用 Display Postscript 实现文字和图形的屏幕显示,而 Cocoa 依赖苹果的 Quartz(基于 PDF 的绘图模型)。
- Cocoa的设计遵循了严格的MVC原则。在OpenStep下,绝大多数的类要么是高层的视图类(AppKit),或者是相对底层的模型类(Foundation)。与类似的MVC系统相比,OpenStep没有强的模型层,例如它不包含表示“文档”的存储类。在向Cocoa迁移的过程中,模型层被大大扩展了,引入了一系列的类,它们提供了一些桌面程序所需的常用功能。
- 在Mac OS X 10.3中,苹果引入了NSController系列类以提供预定义的控制器层。这些类是Cocoa绑定系统的一部分,该系统也允许使用类似键-值-观测器和键-值-绑定协议来对其进行扩展。其中,“绑定”的概念表明两个对象(通常是视图和控制器)之间的关系。绑定使得开发者可以集中于定义这种关系,而不是编写大量的“胶水代码”来实现这些关系。
- 在Mac OS X 10.4中,苹果引入了Core Data框架,进一步扩展了这种概念。Core Data标准化了对更改的追踪和模型层的保存行为。因此,该框架大大简化了改变应用程序数据,撤销更改,在磁盘中保存和读取数据的过程。
通过提供对MVC模型中全部3层的框架支持,苹果的目的在于减少程序员所需编写的“胶水代码”量,以解放这些资源而用于程序的真正特性。 - Cocoa包含两个主要的Objective-C对象库,称为“框架”。框架的功能类似于动态库,即可以在运行时动态的载入应用程序的地址空间,但框架作为一个捆绑 (计算机)而非独立文件,其中除了可执行代码外,也包含了资源,头文件和文档。
“Foundation工具包”,或简称为“Foundation”,首先出现在OpenStep中。在Mac OS X中,它是基于Core Foundation的。作为通用的面向对象的函数库,Foundation提供了字符串,数值的管理,容器及其枚举,分布式计算,事件循环,以及一些其它的与图形用户界面没有直接关系的功能。其中用于类和常数的“NS”前缀来自于Cocoa的来源,NeXTSTEP。它可以在Mac OS X和iOS中使用。
“应用程序工具包”,或称AppKit(Application Kit)是直接衍生自NeXTSTEP的AppKit的。它包含了程序与图形用户界面交互所需的代码。它是基于Foundation建立的,也使用“NS”前缀。它只能在Mac OS X中使用。
“用户界面工具包”,或称UIKit(User Interface Kit),是用于iOS的图形用户界面工具包。与AppKit不同,它使用“UI”的前缀。
和OC的比较
- OC中所有的类都必须继承自NSObject。
- OC中所有对象都是指针的形式。
- OC用self代替this。
- OC使用id代替void*。
- OC使用nil表示NULL
- OC只支持单继承。
- OC使用YES/NO表示TRUE/FALSE
- OC使用#import代替#include
- OC中用消息表示类的方法,并采用[aInstance method:argv]调用形式。
- OC支持反射机制
- OC支持Dynamic Typing, Dynamic Binding和Dynamic Loading。