Objective-C基础教程学习笔记(五)复合

使用复合可组合多个对象,使之分工协作。在实际的过程中,会用到同时使用继承和复合来创建自己的类。

编程中的复合就好像音乐中的作曲一样:将多个组件组合在一起配合使用,从而得到完整的作品。在软件开发中,可能会用一个Pedal(脚踏板)和一个Tire(轮胎)对象组合出虚拟的独轮车。

在Objective-C中,复合是通过包含作为实例变量的对象指针实现的。严格的讲,只有对象间的组合才能叫复合。诸如int,float,enum和struct等基本类型都被认为是对象的一部分。

 

自定义NSLog()

通过NSLog()可以使用%@格式说明符来输出对象,在类中添加description方法就可以自定义NSLog()如何输出对象。

-(NSString *)description{return @“....”}

 

 

if(self = [super init])解释

若要超类可以完成所需的一次性初始化,需要调用[super init]。init方法返回的值(id型数据,即泛型对象指针)描述了被初始化的对象。

将[super init]的结果赋给self是Objective-C的标准惯例。这么做是为了防止超类在初始化过程中返回的对象不同于原先创建的对象。后面会详细讲述init。

 

存取方法

存取方法(accesser method)是用来读取或改变对象特定属性的方法。

读取对象属性的是getter方法。

改变对象属性的是setter方法。

在为存取方法命名时,Cocoa有自己的惯例。setter方法根据它所更改的属性的名称来命名,并加上前缀“set”。getter方法则仅仅根据其返回的属性的名称来命名。

Engine *engine;

-(Engine *) engine{return engine}

-(void) setEngine:(Engine *) newEngine{engine = newEngine;}

 

get这个词在Cocoa中有着特殊的含义。如果get出现在Cocoa的方法命名中,就意味着这个方法会通过你当作参数传入的指针来返回数值。例如,NSData中有一个getBytes:方法,它的参数就是用来存储字节的内存缓冲区的地址。如果你在存取方法的名称中使用“get”,那么有经验的Cocoa编程人员就会想到将指针当成参数传入这个方法。

 

 

复合还是继承

继承在对象间建立了“is a”的关系。如果能说“X是一个Y”,就可以使用继承。

复合建立的则是“has a”的关系。如果能说“X有一个Y”,就可以使用复合。

posted @ 2012-10-08 17:29  TQ.CH  阅读(217)  评论(0编辑  收藏  举报