2.1.2 Objective-C语法
Objective-C是C语言的严格母集合,即任何原始的C语言程式不做修改就可以通过Objective-C编译器,Objective-C还允许使用任何原始的C语言代码。我们形容Objective-C是覆盖于C语言上的一层薄纱,从字面上就可以看出Objective-C的原意:在原始C语言主体上加入面向对象的特性。Objective-C的面向对象语法来自于Smalltalk-80的object和message passing风格,其他包括变量类型、预处理、流程控制、函数声明与调用的非面向对象的语法则和C语言一模一样。
2.1.3 Objective-C的优缺点
Objective-C非常高效,其内核是一个用C语言写成的很小的运行库,这样应用程序的占用空间比较小。许多OO系统使用很大的VM执行时间,就会取代整个系统的运作,Objective-C则相反,编译后的的程序一般不会比原始代码大。其函数库也和Smalltalk系统相反,不需要使用极大的内存来开启一个窗口。
Objective-C的最初是不支持垃圾回收的,因为很多人考虑到Smalltalk回收时的漫长“死亡时间”会令整个系统失去功用。但某些第三方版本已支持垃圾回收(尤是GNUStep),然而Mac OS X 10.3中依然没有引入这个功能。令人欣慰的是,Apple后来发布的Xcode4增加了自动释放的功能。但这两者不能混为一谈,因为它们的机制不一样,Xcode4中的自动释放,采用的是ARC(Automatic Reference Counting)机制,不需要用户去手动Release一个对象,这是由于编译器会在编译期间自动帮你添加那些以前你经常写的[NSObject release]语句。
另一个问题是Objective-C不包括命名空间机制(namespace mechanism),所以程序设计师必须在其类别名称前加上前缀,但是这样会经常引发冲突。在2004年以前,Cocoa编程环境中,所有Mac OS X类和函数都使用前缀“NS”(例如NSObject或NSButton)来辨别它们是否属于Mac OS X Core,因为在NeXTSTEP开发时定下了这些类的名称,所以才将“NS”作为前缀的。
尽管Objective-C是C的母集,但并未将C的基本类型作为第一级对象。和C++不同的是,Objective-C不支持运算子多载(不支持ad-hoc多型)。但Objective-C只容许对象继承一个类别(不设多重继承)的特点和Java是相同的。另外,Objective-C的Categories和protocols提供了很多多重继承的好处,还避免了许多缺点,例如:额外执行时间过重和二进制的不兼容。
因为Objective-C使用动态运行时类型,而所有的方法又都是函数调用(甚至连系统调用有时也会这样),所以很多常见的编译时性能优化方法Objective-C都不能使用,例如:内联函数、常数传播、交互式优化、纯量取代与聚集等。这样便导致Objective-C的性能比类似的对象抽象语言差。文献综述
2.1.4 Objective-C语言的编译环境
目前,常见的Objective-C开发环境有GUNStep(LINUX)和Xcode(Mac OS X)。其中GUNStep也有Windows版本的安装包,而Xcode仅适用于Mac OS X和iOS的开发,不过它可以在Mac虚拟机中运行。
2.2 Cocoa简介
Cocoa是从1980年代由NeXT开发的编程环境NeXTSTEP和OpenStep演变而来的,是Mac OS X上五大API之一(其它四个是Carbon、Posix、X11和Java),并与其它的应用环境共用一个集成开发环境。Cocoa本身由Objective-C语言写成的,因此Cocoa应用程序通常是用Objective-C在Xcode和Interface Builder上写成。
Cocoa和所有的应用程序环境一样,包括运行环境和开发这两个方面。在运行环境方面,Cocoa应用程序呈现Aqua用户界面,并且将用户界面与操作系统其它的可视部分紧密集成。这类应用程序有其独特的外观,是因为Cocoa编程环境让程序从多方面自动遵循苹果公司的人机界面守则。Cocoa无缝地成为用户体验的一部分,在运行环境上运作得很优秀。 Objective-C信息系统电子看板设计与实现(3):http://www.youerw.com/jisuanji/lunwen_69328.html