《Objective-C基础教程》第5章 复合

来源:互联网 发布:知乎 满船清梦压星河 编辑:程序博客网 时间:2024/04/28 03:55

5.1 什么是复合

复合(composition):将多个组件组合在一起,配合使用,从而得到完整的作品。
在Objective-C中,复合是通过包含作为实例变量的对象指针实现的

5.2 自定义NSLog()

NSLog(@"%@",Object)//使用%@格式说明符来输出对象
if(self=[super init])//为了让超类将所有需要的初始化工作一次性完成,需要调用[super init]

init方法返回的值(id类型数据)就是被初始化对象
[super init]返回的结果是self是Objective-C的惯例,这是为了防止超类在初始化过程中返回的对象与一开始创建的不一致。

5.3 存取方法

-(Engine *)engine//getter方法engine返回实例变量engine的当前值{    return (engine);//Objective—C中所有对象的交互都是通过指针实现的,所以engine方法返回的是一个指针}-(void)setEngine:(Engine *)newEngine//setter方法将实例变量的值赋为参数所指向的值。{    engine=newEngine;//实际上被复制的并不是engine的值,而是志向engine的指针指。即,重复调用setEngine:之后还是值存在一个engine}

实际运用这些存取方法,可编写一下代码

Engine *engine=[Engine new];[car setEngine:engine];
5.3.2 设置tires属性的存取方法

与上节类似
防御式编程(defensive programming):检查代码,并通过NSLog()输出结果

5.3.3 Car类代码的其他变化

Car类有了可以访问engine和tires变量的方法,无需再使用init方法创建两个变量。

5.4 扩展CarParts程序

利用存取方法,使用继承方式来创建新的发动机和轮胎。(例如,在getter方法中设置不同的发动机类型,在setter中将新发动赋予Engine)

5.5 复合还是继承

1、继承的类之间的关系为“is a”,例如,三角形is a 形状
2、复合的类之间的关系为“has a”,例如,汽车has a 发动机

5.6 小结

1、复合的概念
2、存取方法:setter设置对象的属性,getter获取对象的属性的值
3、Cocoa存取方法的命名规则

0 0
原创粉丝点击