close

 

第一章:什么是cocoa

1- 一点历史

          让我们从一个有意思的故事开始我们的cocoa旅程吧.很久前(我还没出生呢)有两个叫Steve的天才创建了一个公司,名为苹果电脑,这家公司成长的非常快,所以他们聘请了一个叫John Sculley的人来担任他们公司的CEO. 没想到的是,在一些矛盾冲突后,John Sculley居然把其中一个Steve的赶出了苹果公司,这个Steve就是现在大名顶顶的Steve Jobs. Jobs在离开苹果后组建了一个新的公司 Next Computer

          NeXT公司雇佣了一些有才华的工程师组建了一个小团队. 这个团队开发了自己的电脑,操作系统,打印机和一堆的开发工具.这些在当时那个年度都是超前的.不幸的是他们的硬件没有好的市场.在1993年,,工厂也关门了,NeXT Computer 也变成了 Next Software.

          操作系统和那些开发工具以NeXTSTEP为名继续在卖.可能一般的计算机用户都没有听过NeXTSTEP.但NeXTSTEP在某些领域很流行,并且有一些人一直在使用它来开发自己的应用程序.他们觉得NeXTSTEP能更快的让他们的想法能变成计算机实现.

          好了,那就让我们看看这是怎样的一个操作系统. NeXT使用Unix作为NeXTSTEP的内核.为什么是Unix呢?可能是因为Unix比Windows或Mac OS更稳定,

          Apple的Darwin就是基于Unix创建作为Mac OSX 核心.有兴趣的朋友可以访问 http://macosforge.org/得到更多的信息.

          NeXT给他们的操作系统编写了一个window server. window server可以把用户输入的事件转发个应用程序. 而应用程序会给window server发送drawing给window server来刷新UI. NeXTSTEP的一个优点是发给应用程序的绘制指令和发给打印机的一样,所以程

序员只需要写一次控制代码,便可以用于显示在显示器上也可以用于打印机

上。在NextStep的时代,程序员书写可以生成PostScript的代码,而在Mac OS X时代,程序员

使用Core Graphics(通常所说的Quartz)框架的代码,Quartz可以在屏幕上合成这

些图形或者把他们发送到打印机,或者生成PDF数据。PDF是一个由 Adobe 公司制定的开放的协议,主要用于矢量图形的存储

          如果你以前使用过Unix,你可能会比较熟悉X 窗口服务器,Mac  OS X的window server于X窗口服务器完全的不同,但是它完成了X窗口服务器相同的功能:从用户那里接受事件并将事件发给应用程序,然后将应用程序发来的数据显示在屏幕上。可是X协议对反锯齿字体和透明化支持不是很好,这就是Mac OS X窗口比X-window窗口 看起来更加美观的一个原因

          NeXTSTEP内置的许多库和工具,让程序员以一种优雅的方式与窗口管理器进行

交互,这些libraries叫做Framework,在1993年这些frameworks和工具被重新修改并重命名为 OpenStep,后来被重命名为Cocoa(大家应该知道为什么Cocoa的类都有着NS的前缀了吧)

         如图1.1: 窗口服务器和应用程序都是unix 进程,Cocoa可以使应用程序从窗口服务器接受事件以及在屏幕上绘图。

1.png     

我们使用的是一种叫做Objective-C的语言应用这个Frameworks来编程。就像C++一

样,Objective-C是在C语言上拓展,使得它基于对象。但是不像C++ ,Objective-C是一

种弱类型语言,同时也极其强大的语言。Objective-C允许程序员犯一些可笑的小错

误。Objective-C是C语言的一个简单的扩充,你会觉得它很容易学。

         程序员喜欢OpenStep。OpenStep可以让他们更容易的试验他们的新想法。事实

上,Tim Berners-lee 在NexTSTEP上开发出了第一个网页浏览器和web服务器。证券分析员们可以很快的开发和测试新的金融模块。大学生们可以开发他们的研究程序。我不知道情报局的人们拿NexTStep来做什么,但是情报局购买了数千份OpenStep 的拷贝。因为这些工具是如此的实用,OpenStep开发工具被移植到Solaries和Windows NT 上,NextStep操作系统被移植到当时多数流行的CPU平台上包括:Intel, Motorola, Hewlett-Packard's PA-RISC, and SPARC

         许多年以来,苹果公司致力于开发一个具有NextStep特性的操作系统。这就是所知的 Copland计划。Copland计划逐渐的失控了,苹果公司最终决定放弃开发,转向从别的公司购买下 一个版本的Mac OS。在经过调查现存的操作系统之后,苹果公司选择了NextSTEP,因为NeXT很小,苹果1996年收购了Next整个公司。

       我为什么讲这段历史呢?我一直在华尔街为NeXT公司写代码直到他们雇佣我教授其他的开发人员OpenStep技术。当NeXT和苹果合并的时候我是NeXT的一员。我教授了许多苹果工程师怎样为Mac OS X开发程序。现在的我不是苹果公司的一员了,我现在为Big Nerd Ranch公司教授Cocoa。

        NeXTSTEP变成Mac OS X,它是Unix的一个分支,你可以在Mac OS X 上找到所有的标准Unix程序,比如Apache Web Server,在Mac OS X上,它比在Windows 和Mac OS 9 更加的稳定.用户界面也更加的漂亮,作为一名开发人员,你将会爱上Mac OS X,因为Cocoa 可以使你快捷、高效、优雅的开发出功能强大的应用程序。

 

2- 开发工具

          你会爱上Cocoa的,虽然可能不是马上。首先,你将学习基本知识,让我们从将用到的工具开始吧.Cocoa开发用到的所有工具都作为Mac OS X Developer Tool的一部分一起提供给用户,你可以从Mac OS  X安装盘中免费的得到它们。虽然Mac OS X Developer Tool将会在你的系统中添加许多有用的程序。但是我们将主要使用这两个程序:Xcode 和 Interface Builder。而在这些IDE内部,gcc作为编译器来编译代码,gdb来调试。

       Xcode掌控应用程序中所有使用到的资源,代码,图片,声音等等.你只要在Xcode中编写代码,由Xcode来编译和运行你的程序。同时Xcode也能调用和控制调试器。

       Interface Builder是一个GUI构建工具,通过它你可以创建窗口布局并且把各个组件添加到窗口中,Interface Builder使程序员能方便的创建各种对象和编辑它们的属性,这些对象多数是用户界面元件,比如按钮和文本输入框,但是也可以是你自定义的对象

 

 

3- 开发语言

          这本书中所有的例子都将使用Objective-c语言来编写。Objective-C语言是C语言简单而优雅的扩充.如果你已经掌握了c或者其他面向对象的语言,如C++或者java,你大概花两个小时能掌握它.

       也可以使用Ruby或者Python来开发Cocoa应用程序,本书不会涵盖这部分内容,如果你感兴趣可以在网上找到大量的资源,不过你想理解它,你仍然需要了解一些Objective-c的原理。

        Objective-C已经发展到一个主要版本,这本书中的所有的代码都是基于Objective-C 2.0 版本的.苹果在2.0版的Objective-C中添加了垃圾回收机制.垃圾回收机制是可以使用或者不使用.在本书中你将使用它。

        Objective-C的代码由gcc编译,gcc编译器允许你自由的在同一文件中混合C ,C++和以及Objective-C语言。

       gdb将会被用来设置断点,查看运行中的程序中的变量的值,Objective-C在调试中给了你很大的自由.你会很乐意地去使用这样一个合适的调试器。

 

 

4- 对象,类,方法和消息

          Cocoa编程使用面向对象技术.这一节我们来简单回顾一下面向对象的知识.如果你没有这方面的经验.我建议学习一本书:The Objective-C Language . 你可以在苹果网站上下载到PDF版本http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/ObjC.pdf(当然也是英文版的.是否有必要下次把它翻译下:) )

        什么是对象?对象就像C语言中的结构.它占用内存空间来保存自己的变量.这些变量对于对象而言叫:instance variables. 所以在处理对象时,我们首先相到的是:你怎样分配空间么?这个对象拥有那些instance variables?在不再使用对象的时候,你有释放它么?

             对象的某些instance variables可能是其他一些对象的指针.拥有这样的指针,我们称为该对象"know about"那个所指向的对象.

          类是可以用来创建对象的结构.类中定义了对象中拥有的变量并且负责为对象申请内存空

间,我们可以这样说.对象是类的一个实例.

 


2.jpeg 

 

         对象要优于结构的地方是对象有相关的函数.我们把这些函数叫做方法. 你可以发送一个消息来调用指定的某个方法.

           3.png

5- Framework

          框架是一些类的集合,通常是一些可能一起使用的类集合.换句话说,这些类被一起编译成可复用的代码.加上相关的所有资源组成一个代扩展名.framework的目录(Mac OSX bundle 的概念可以参考苹果的一些文档). 系统自带的framework可以在/System/Library/Frameworks找到.

          Cocoa有3个framework组成

          1. Foundation: 所有的面向对象语言都会有一些标准结构: value , collection , String, dates, lists, thread等等.所有的这些都在Foundation framework里面(可以对比C++的STL)

          2. Appkit: 所有和用户界面相关的类都在这里. Windows,buttons,text field, event, drawing. 它还有个名字: ApplicationKit

          3. Core Data: Core Data可以方便的让你把你的对象存储成文件,或是从文件中加载你的对象.

          当然Mac OSX 开发包还提供了其他的很多framework. 比如QuickTime, CD 刻录等等. 这本书我们只关注上面提到的3个基本framework. 一旦你掌握了这些基本framework.你将会更容易理解其他的framework.(cocoa 只是MacOSX的一个开发环境,它提供基本的开发Max OSX应用程序的SDK. 当然如果你要开发某种特定的应用,你可以需要使用Apple提供的其他SDK. 例如要开发播放DVD的程序.你可能会使用到DVDPlayback.framework.它甚至是C++接口的)

          当然,你也可以创建你自己的framework. 一个典型的例子,当相同的类被好几个应用程序使用的时候.你可能会扔给他们一个framework.

 

6- 怎样阅读这本书

          当我做下来打算写这本书的时候,我在想怎么样能能让朋友们通过实践来了解学习Cocoa编程.这本书可以算做是一本实践指导书.通常,书中让你做些什么,然后再解析答案细节和理论基础.如果你有疑问,请再往后面阅读,通常,答案就在接下来的一两段.

          如果你仍然感到有困难,你可以从这个站点找到帮助:  www.bignerdranch.com/products. 在那里你可以找到修订表,提示,以及例子. 练习的答案也可以在那里找到.

          每一章,我都会引导你给一个应用程序来添加一些功能.这本书不是一本菜谱(依葫芦画瓢的意思吧).它主要是教会大家思想,所以大胆的动手吧.

          Cocoa大概定义了300个类.所有的这些类的说明文档都可以通过在线帮助找到( 通过XCode工具的Help 菜单可以访问到,免费的噢). 可是面对这么多的类文档,如果你不对Cocoa的整体有个大概了解,你是很难找到怎么有效的找出你所想要的.当我在这本书介绍到一个新的类时,请试试在在线帮助浏览它,你不一定把你浏览到的全部理解,但是至少会加深你的认知.当你结束本书的学习后,在线帮助将成为你Cocoa开发的指航明灯.

          Cocoa程序开发通常是这样:常见的应该是简单的,不常见的是可能的.如果你为了一个普通的功能写了很多的代码,那你要考虑到你的方向存在问题了.

 

7- 约定

          略过

 

8- 常见错误

          很多人在都遇到过这些错误,甚至同一个错误出现过上百次:搞错大小写,忘记链接

          大小写错误的存在是因为C和Objective-C语言是大小写敏感的. Foo和foo,对于编译器来说不是一回事.所以在编译上遇到问题是,请注意是不是大小写写正确了.

          当你创建一个应用程序时.通常是会用到Interface Builder来连接对象.而忘记做这些连击,一般会是你的应用程序在运行的时候产生莫名奇妙的问题.所以如果你的应用程序反应异常,请回过头来检查一下Interface Builder, 是否忘记了连接对象.

          当你第一次编译一个文件时,你可能很容易漏掉一些编译警告.而由于XCode是增量型编译器,如果你不重新编译这个文件就看不到那些警告了.所以,当陷入到一些怪问题时,尝试清除,重新编译,在检查那些警告.

 

9- 怎样学习

          我教过各式各样的学生,聪明的,不聪明的.勤奋的,懒惰的.有经验的,没有经验的.但是通过学习我的课程收获最多的同学都有一个特性,那就是专注.

          第一个诀窍是足够的睡眠.我建议当你准备学习一个新的东西时,每天保证10个小时的睡眠.不信你可以试试看,当你醒来时一定是精力充沛的. 咖啡是不能代替睡眠的.

          第二个诀窍是要自信.很多同学经常这样想:"这个对我来说太难了吧.我是不是太笨了?".如果有这样的想法,你就没有办法专注了.(不要害怕,Cocoa还是比较有意思,也比较好学的)

          Rock,我以前的老板.他取得了Cal Tech的天体物理学位.可是在他后来的工作中从来没有使用过相关知识.有一次我问他是否后悔去读这个学位.他说"不.事实上证明我的学位是很有价值的,世界上确实有些很困难的事情.当我面对它们的时候可能会问'这个对我来说太难了,我是不是不够聪明?' , 可这时候我会想起我曾经获得过Cal Tech 的天体物理学位,我一定不笨"

       在开始前,确信虽然是有一些困难的事情,但自己一定不笨.有了坚定的信心和充沛的精力,你就做好了征服Cocoa的准备! 

 

 

copy from : http://blog.sina.com.cn/s/blog_5df7dcaf0100be67.html 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 NatPixnet 的頭像
    NatPixnet

    Nat's programing

    NatPixnet 發表在 痞客邦 留言(0) 人氣()