##定义类编程
当你为OSX或者iOS编写软件的时候,大部分时间是花在对象上的。OC语言的对象和其余面向对象编程语言的对象概念类似:都是包装了相关
行为的数据。框架
构建一个App,是构建一个生态系统,系统中的对象互相通讯,以解决特定的问题,好比展现一个可视界面,对用户输入做出反馈,或者存
储信息。对于iOS开发,你不须要从头开始造轮子来解决问题,有一大波现成的对象以供使用,Cocoa Touch框架提供。编程语言
这些对象中,有一些立等可用,好比基本的数据类型,字符串,数字,或者用户界面元素,按钮,表格视图等等。一些对象则须要你来用自
己的代码定制,作出合适你所须要的行为。在程序开发过程当中,包含了操做框架中的类,定制和组合这些类来赋予程序独特的功能和特性。对象
在面向对象的术语中,一个对象就是一个类的一个实例。本节的内容就是看看如何在OC中定义一个类。首先须要的是声明一个借口,用来描
述你的类和这个类的实例如何被使用。这个接口包含了一个这个类能够接受的消息的列表,因此在这个类里面也须要提供类的实现,实现中
包含的是对应每个消息的可执行的代码。继承
###类是对象的蓝图接口
一个类描述的是任何特定类型的对象所共有的属性和行为。对于一个字符串对象(在OC中,这是NSString类的一个实例),这个类提供了很
多种凡是来对包装的内部字符进行检查和转化操做。类似的,用来描述一个数字对象的类(NSNumber)提供的功能就是围绕着一个内部的数
字值进行的,好比转化成不一样的数字类型的操做。开发
从同一个蓝图中构造出来的多个对象,从结构的角度来讲是相同的,类的每个实例都拥有其余全部类实例同样的属性的行为。每个
NSString实例的行为都是同样的,只是各个实例中的内部字符串是不同的。字符串
任何特定的对象都有特定的用法。你可能知道一个字符串对象包装了一些字符,可是你并不须要知道存储字符的内部机制是什么样子。你不
须要知道对象内部是怎么操做具体字符的,可是确实须要了解和对象交互的期待的反馈是什么,或许是要求一个特定位置的字符,或者是返
回一个字符所有转成大写的新的对象。面向对象编程
在OC中,类接口定义了给定类型的对象如何被其余对象使用。换句话说,类接口定义了类的实例与外部世界的公共接口。table
###可变性决定了一个被包装的值可不能够被改变
一些类是将对象定义成不可变的。意思就是在对象被建立的时候,内部的内容必须初始化完毕,在以后的过程当中不能够被改变。在OC中,所
有基本的NSString和NSNumber对象都是不可变的。若是你须要表示一个不一样的数字,那就须要一个新的NSNumber实例。
一些不可变的类也会提供一个可变的版本。若是须要在运行时改变字符串的值,好比在字符串后面追加内容,就可使用一个
NSMutableString类的对象实例,这个类的实例跟NSString同样,除了他提供了更改对象表示的字符的功能。
虽然NSString和NSMutableString是不一样的类,可是也有不少类似的地方。不是说,从细节开始彻底不一样的两个类,有了类似的行为,而是
利用了继承来实现的。
###从其余的类继承的类
在现实世界中,生物分类学用属于种,属,族来区分动物的种类。这些歌分类是有层次性的,好比多个种属于一个属,多个属是一个族的。
大猩猩,人类,猩猩,他们之间有许多的类似性。虽然分属于不一样的族,甚至不一样的属,可是从生物分类学上来讲,他们都是属于一个科,
人科。
在面向对象的世界中,对象也是被分进层次结构的组织中。没有使用特殊的术语来表示一层层的科,重,属,仅仅是简单地组织成了类。相
似的,人类做为人科的一个成员继承了特定的属性,成为人类,一个类能够被设置成从父类继承功能。
一个类从其余的类继承的时候,子类就会继承父类的全部属性和行为。子类也能够定义本身另外的行为和属性,或者覆盖掉父类的方法。
好比OC的字符串类,NSMutableString的类描述就定义了这个类继承自NSString类。全部NSString类提供的方法均可以在NSMutableString类
中访问,好比查询特定的字符或者请求新的大写的字符串,可是NSMutableString增添了方法,能够追加,插入,替换和删除字符串和独立
的字符。
###提供基础功能的根类
就像全部的生物都都有一个生命属性同样,有一些功能是OC的全部类都拥有的。
当一个OC对象须要和另外一个类的OC对象一块儿工做的时候,就会指望另外一个类能够提供最最基本的特性和行为。所以,OC定义了一个根类来给其余的类来继承,叫作NSObject类。当一个对象遇到另外一个对象,最最低的期待也能够达到NSObject中所描述的行为功能。
当你定义本身的类的时候,最起码要继承NSObject类,通常来讲,你应该在框架里面找一个功能最相近的类来继承。
若是你作iOS开发,框架里的UIButton已经没法知足你的定制需求,想整一个本身定义的按钮,继承自UIButton类确定比继承自NSObject类要好。若是简单继承NSObject,还要复制和诺复杂的视觉交互和通信功能的代码,费了好大劲才能达到UIButton已经提供的功能。另外,要是继承自UIButton的话,子类也会自动得到UIButton将来会得到的扩展和Bug修复,一举多得。