用 Objective-C 编程:定义一个类

##定义类

当你为OSX或者iOS编写软件的时候,大部分时间是花在对象上的。OC语言的对象和其他面向对象编程语言的对象概念相似:都是包装了相关
行为的数据。

构建一个App,是构建一个生态系统,系统中的对象互相通信,以解决特定的问题,比如展示一个可视界面,对用户输入作出反馈,或者存
储信息。对于iOS开发,你不需要从头开始造轮子来解决问题,有一大波现成的对象以供使用,Cocoa Touch框架提供。

这些对象中,有一些立等可用,比如基本的数据类型,字符串,数字,或者用户界面元素,按钮,表格视图等等。一些对象则需要你来用自
己的代码定制,做出合适你所需要的行为。在程序开发过程中,包含了操作框架中的类,定制和组合这些类来赋予程序独特的功能和特性。

在面向对象的术语中,一个对象就是一个类的一个实例。本节的内容就是看看如何在OC中定义一个类。首先需要的是声明一个借口,用来描
述你的类和这个类的实例如何被使用。这个接口包含了一个这个类可以接受的消息的列表,所以在这个类里面也需要提供类的实现,实现中
包含的是对应每一个消息的可执行的代码。

###类是对象的蓝图

一个类描述的是任何特定类型的对象所共有的属性和行为。对于一个字符串对象(在OC中,这是NSString类的一个实例),这个类提供了很
多种凡是来对包装的内部字符进行检查和转化操作。相似的,用来描述一个数字对象的类(NSNumber)提供的功能就是围绕着一个内部的数
字值进行的,比如转化成不同的数字类型的操作。

从同一个蓝图中构造出来的多个对象,从结构的角度来说是相同的,类的每一个实例都拥有其他所有类实例一样的属性的行为。每一个
NSString实例的行为都是一样的,只是各个实例中的内部字符串是不一样的。

任何特定的对象都有特定的用法。你可能知道一个字符串对象包装了一些字符,但是你并不需要知道存储字符的内部机制是什么样子。你不
需要知道对象内部是怎么操作具体字符的,但是确实需要了解和对象交互的期待的反馈是什么,或许是要求一个特定位置的字符,或者是返
回一个字符全部转成大写的新的对象。

在OC中,类接口定义了给定类型的对象如何被其他对象使用。换句话说,类接口定义了类的实例与外部世界的公共接口。

###可变性决定了一个被包装的值可不可以被改变

一些类是将对象定义成不可变的。意思就是在对象被创建的时候,内部的内容必须初始化完毕,在之后的过程中不可以被改变。在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修复,一举多得。

 

转载于:https://www.cnblogs.com/zhangzjblog/p/4708691.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值