Cocoa 开始于1989年9月上市的NeXTSTEP 1.0,当时没有Foundation框架,只有动态
运行库, 称为 kit, 最重要的是AppKit. 1993 年 NeXTSTEP 3.1 被移植到了 Intel, Sparc, HP 的平台上,Foundation 首次被加入,同时Sun 和 NeXT 合作开发OpenStep 也可以运行在Windows 系统上VCV。
Cocoa 应用程序一般在苹果公司的开发工具Xcode(前身为Project Builder)和Interface Builder上用Objective-C写成。不过,通过Java bridge、PasCocoa、PyObjC、CamelBones以及RubyCocoa等桥接技术,Java、Clozure CL、LispWorks、Object Pascal、Python、Perl、Ruby等其它工具或者语言也可以用来开发 Cocoa 应用。也有一些其它语言的Cocoa实现无须桥接,比如苹果公司开发的MacRuby和类似Lisp的Nu语言。不使用Xcode和Interface Builder,仅仅通过
文本编辑器、GCC和GNU make工具也可以用Objective-C语言开发Cocoa应用。
对最终用户来说,使用Cocoa
编程环境开发的应用程序即为Cocoa 应用。这类应用有独特的外观,因为Cocoa编程环境让程序在多方面自动遵循苹果公司的人机界面守则。
二、内存管理
Cocoa环境的一个特点是它可以管理动态分配的内存。Cocoa中绝大部分类的
基类都是NSObject,它实现了
引用计数的内存管理模型。从NSObject继承的类可以响应retain和release消息,以增减其引用计数;也可以通过发送retainCount消息来获取其引用计数。一个以
alloc ,copy或Objective-C 2.0中增加的new所创建的对象的引用计数为1;向对象发送retain消息会将计数加1,而发送release消息则会将计数减1。若对象的引用计数减少到了0,则它会被销毁。dealloc消息类似于C++中的
析构函数,在对象被销毁之前可能会被调用,但系统不保证会发送该消息。这种
引用计数的模型与微软的COM中的IUnknown接口特性十分相似,它提供了AddRef和Release接口,与retain和release对应。
从Objective-C 2.0开始,Objective-C运行时实现了可选的垃圾收集器。若垃圾收集的特性被激活,则运行时会将引用计数相关的操作,例如“retain”和“release”,变为无操作。iOS上的Objective-C 2.0实现中不包含垃圾收集器。垃圾收集器运行在一个低优先级的后台线程中,并可以在用户动作时暂停,从而保持良好的用户体验。
三、主要的框架
1、 foundation 工具包
首先出现在OpenStep中。在Mac OS X中,它是基于Core Foundation的。作为通用的
面向对象的函数库,Foundation提供了字符串,数值的管理,容器及其枚举,分布式计算,事件循环,以及一些其它的与
图形用户界面没有直接关系的功能。其中用于类和常数的“NS”前缀来自于Cocoa的来源,NeXTSTEP。它可以在Mac OS X和iOS中使用。
2、 应用程序工具包
也叫AppKit(Application Kit)是直接衍生自NeXTSTEP的AppKit的。它包含了程序与图形用户界面交互所需的代码。它是基于Foundation建立的,也使用“NS”前缀。它只能在Mac OS X中使用。
3、用户界面工具包
也叫UIKit(
User
Interface
Kit),是用于iOS的
图形用户界面工具包。与AppKit不同,它使用“UI”的前缀。