2.2.1 Objective-C语言的优缺点
Objective-C是非常“实际”的语言。和大部分OO系统使用极大的VM执行时间取代整个系统的运作相反的是,Objective-C使用一个用C写成的很小的运行库,它写成的程序通常不会比源代码大很多。而其函数库亦和Smalltalk系统要使用极大的内存来开启一个窗口的情况相反。
Objective-C的最初版本并不支持垃圾回收。在当时,这是争论的焦点之一,有很多人考虑到Smalltalk回收时有漫长的“死亡时间”,令整个系统失去功用。Objective-C为避免此问题才不支持垃圾回收。虽然某些第三方版本已加入这个功能(尤其是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核心;使用“NS”是由于这些类的名称在NeXTSTEP开发时定下的。
虽然Objective-C是C的超集,但它也不将C的基本类型作为第一级对象。与C++不同的是,Objective-C不支持运算子多载。而跟Java相同的是,Objective-C只容许对象继承自一个类(不设多重继承)。它的Categories和Protocols用来实现多重继承,既规避了多重继承的缺点,又提供了多重继承的好处(例如额外执行时间过重和二进制的不兼容)。
由于Objective-C使用动态运行时类型,而且所有的方法都是函数调用(有时甚至连系统调用也是如此),很多常见的编译时性能优化方法都不能应用于Objective-C(如内联函数、常数传播、交互式优化、纯量取代与聚集等)。这使得Objective-C性能劣于类似的对象抽象语言。
2.2.2 Objective-C语言的编程环境
目前,常见的Objective-C开发环境有GUNSTEP(LINUX)和Xcode(Mac OS X)。其中GUNSTEP也有Windows版本的安装包,而Xcode只针对Mac OS X和iOS的开发,可以在Mac虚拟机里运行。[2]
2.3 Cocoa简介
Cocoa是一套面向对象的框架,它为程序在Mac OS X和iOS上运行提供了一个运行环境。它是Mac OS X上卓越的应用环境和iOS上唯一的应用环境。(Carbon也是一个Mac OS X上可供选择的应用环境,但是它是一个具有程序编程接口的兼容性框架,旨在支持现有的Mac OS X代码基础。)您可以在Mac OS X和iOS上看到许多应用,包括Mail和Safari这些都是Cocoa应用。一个名为Xcode的集成开发环境支持这两个平台应用开发。它与Cocoa的结合使得创建一个良好因素的全功能的应用变得简单。
和所有的应用程序环境一样,Cocoa包括两个方面:即运行环境方面和开发方面。在运行环境方面,Cocoa应用程序呈现用户界面,且和操作系统的其它可视部分紧密集成。在Mac OS X里,这些部分包括Finder、Dock、和基于所有环境的其它应用程序。
但是,程序员更感兴趣的是开发方面。Cocoa 是一个面向对象的软件组件—类的集成套件,使开发者可以快速创建强壮和全功能的Mac OS X和iOS应用。这些类是可复用和可支配的软件积木,开发者可以直接使用,或者根据具体需求对其进行扩展。从用户界面对象到数据格式编排,几乎每个想象得到的开发需求都存在对应的Cocoa类。对于没有预想到的需求,您可以轻松地从现有类派生出子类来实现。 IPAD上邮件系统集成应用与实现(3):http://www.youerw.com/jisuanji/lunwen_8098.html