当前位置: 首页 > article >正文

Cocoa 框架

 

Cocoa 框架

接下来的段落总结了 Cocoa 的类和一些重要的框架的示意图,特别是核心框架 Foundation (基础)和 Application Kit (应用程序工具箱)。
内容:

    介绍
    基础框架
    应用程序工具箱
    其它 Cocoa API 框架

 

介绍

是什么使得一个程序变成了一个 Cocoa 的程序?它其实不是编程语言,因为您可以在 Cocoa 开发中使用一些不同的语言。它也不是开发工具,因为您可以在命令行中(尽管这会是一个非常复杂和耗时的工作)创建一个 Cocoa 应用程序。所有 Cocoa 应用程序的共性(也就是使得它们与众不同的东西)是它们都由一些最终从根类, NSObject ,继承而来的对象组成,而 NSObject 最终基于 Objective-C 运行时间。这个解释对于所有的 Cocoa 框架同样正确。

注意 : 这个解释还需要做一点点澄清。首先, Cocoa 提供了另外一个根类, NSProxy ;但是, NSProxy 在 Cocoa 编程里很少被用到。其次,您也可以创建您自己的根类,但是这将是很大量的工作(需要您编写代码与 Objective-C 运行时间相交互),结果是可能得不偿失。 

Mac OS X 包含了几个 Cocoa 框架,并且苹果和其它第三方开发商一直在发布更多的框架。尽管 Cocoa 框架有很多,有两个与其它的有很大的区别。基础( Foundation )和应用程序工具箱( Application Kit )是 Cocoa 的核心框架。您除非链接应用程序工具箱(以及使用它的类),否则您不能开发一个 Cocoa 应用程序。你也不可能开发 Cocoa 任何类型的软件,除非您链接基础框架或者使用它的类。(链接这些框架是当您在链接 Cocoa 伞状框架时自动完成的)。基础和应用程序工具箱框架是 Cocoa 开发的基础,所有其它的框架都是次要的和可选的。

接下来的章节考察了这两个核心 Cocoa 框架的功能和类,并且简要描述了一些次要的框架。为了使得这些大的框架更加容易被掌握,对于基础和应用程序工具箱框架的介绍会按照功能组的体系分割为几十个类。尽管这些功能组有很深的逻辑基础,您可以按照其它方式把这些类分组。

基础框架

基础框架定义了一个类的基础层,这些类可以被任何类型的 Cocoa 程序所使用。区分基础框架和应用程序工具箱的类的标准是用户界面。如果一个对象既不出现在一个用户界面里,也不特意的被用来支持一个用户界面,那么它的类就属于基础框架。您可以仅使用基础框架创建 Cocoa 程序;这些程序可能是命令行工具和因特网服务器。

基础框架设计的初衷是:

    * 定义基础对象行为以及为例如内存管理,对象易变性和通知引进一致的约定。

    * 使用包技术和 Unicode 字符串支持国际化和本地化技术。

    * 支持对象持续。

    * 支持对象分发。

    * 提供一些操作系统独立的方法来支持可移植性。

    * 为编程基元提供对象包装或者等同物,例如数字数值,字符串以及集合。同时来包含了工具类用于调用底层系统实体和服务,例如端口,线程和文件系统等。

Cocoa 应用程序,由链接应用程序工具箱而定义,不可避免的也要链接基础框架。类的继承共享了同一个根类, NSObject ,而且许多应用程序工具箱的方法和函数使用基础框架对象作为参数或者返回值。一些基础框架类可能看起来像是为应用程序设计的,例如 NSUndoManager 和 NSUserDefaults ,但是它们包含在基础框架里,因为他们可以用在不涉及用户界面的地方。

基础框架范例和规则

基础框架为 Cocoa 编程引进了几个范例和规则来保证一致的表现和在一些特定情况下程序中的对象之间的期待结果。包括:

    * 对象拥有权和对象处理。不是使用一种自动的垃圾回收机制,基础框架实行了一种对象拥有权的规则,这个规则定义对象负责释放其它的它们创建的,拷贝的或者明确保留的对象。 NSObject (类和协议)定义了保留和释放对象的方法。自动释放池(定义了 NSAutoreleasePool 类)实现了一个延时释放的机制,从而使得 Cocoa 程序拥有了一个返回那些调用者不再负责任的对象的一致的约定。要获得更多关于对象拥有权和处理相关的信息,请参考内存管理。

    * 可变类的变体。许多基础框架的数值类和容器类拥有一个不可变类的可变的变体,而这个可变类始终是不可变类的一个子类。如果您需要动态的改变这样的一个对象的封装的数值或者成员,您要创建可变类的一个实例。由于它是从不可变类继承而来,您可以在不可变类型的方法中传递可变的实例。

    * 类簇。一个类簇是一个抽象类和一套私有具体的子类,抽象类表现为具体子类的伞状接口。依赖于上下文(特别是您用来创建对象的方法),一个适当优化过的类的实例会返还给您。例如 NSString 和 NSMutableString ,充当为为不同类型的存储需求而优化的多种私有子类实例的经纪人。经过若干年,整套的具体类已经改变了几次,但是应用程序并没有被破坏。

    * 通知。通知是 Cocoa 中一个主要的设计模式。它基于一个广播的机制,允许对象(被称为观察者)被一直通知其它的对象正在做什么或者在用户和系统事件里遇到了什么。通知的的发起对象可以不知道通知的观察者的存在或者身份。有几种通知的类型:同步的,非同步的以及分布的。基础框架通知机制由 NSNotification ࿰

http://www.lryc.cn/news/2414170.html

相关文章:

  • windows C++多线程(三):线程终止结束ExitThread与TerminateThread
  • 关于delphi软件运行出现Invalid floating point operation的错误的解决办法
  • 运维自动化概述
  • Unity3D AVProVideo开始播放跟播放完成
  • 一个坑
  • 驻极体麦克风简介
  • window.history.go(-1)和window.location.go(-1)区别
  • 【毕业设计源码】PHP网上商城管理系统
  • VC6.0下载和安装教程
  • 半导体制冷片-热电效应简介
  • 【Oracle】常用Oracle基础知识
  • 创建DPlink
  • 解决rhythmbox听歌问题
  • input中常用的type属性与使用场景
  • xnio java_使用Cargo Java API和Jenkins部署到Wildfly时出现“XNIO001001:没有找到XNIO提供程序”错误...
  • 猪猪猫.CN-WINXPSP2电脑城装机03CD标准版
  • 保险丝的常用规格型号及主要参数说明
  • Spring RequestScope和SessionScope的来龙去脉
  • 鼠标事件之外,认识一下指针事件家族?
  • Linux安装教程(超详细版)
  • Linux服务器安全配置加固防护方法_怎么做端口加固
  • U盘病毒专杀工具(usbcleaner)(绿色版)
  • 华为EC6108V9C/ E6108V9强刷固件及教程
  • C++ string的详细总结
  • 轻量级网络模型之MobileNet系列
  • kindeditor php 漏洞,Kindeditor特定情况可能会导致全盘浏览 - 网站安全
  • 堆栈的区别
  • 10种JavaScript特效实例
  • BuildaFlightTrackerwithCesiumforUnreal_译
  • SDF!这特效牛不牛?