复合
使用复合可组合多个对象,使之人工协作。
会同时使用继和复合来创建自己的类。
编程中的复合就好像音乐中的作曲一样;将多个组件组合在一起配合使用。
在Objective-C中,复合是通过包含作为实例变量的对象指针实现的。
@interface Unicycle : NSObject
{
Pedal *pedal;
Tire *tire;
}
@end
pedal 和tire通过复合的方式组成了Unicycle(独轮车)
Car 程序
如何搭建汽车模型。
CarParts 包含在主程序mainCarParts.m中。
#import <Foundation/Foundation.h>
@interface Tire : NSObject
@end
@implementation Tire
- (NSString *) description
{
return (@"I am a tire. Ilast a while");
}
@end
Tire类中唯一的方法是description,没有在接口中声。
Cocoa神奇的帮助
自定义NSLog()
通过NSLog()可以使用%@格式符来输出对象.
从技术上讲,就是NSLog()给这个对象发送描述消息,然后对象的description方法生成一个NSString并返回。
在类中添加description方法就可以自定义NSLog()如何输出对象
在自定义的description方法中,你可以选择返回一个字面值NSString.如@"I am a cheese Danish Object"
,也可以构造一个描述该对象所有此类消息的字符串。
在Cocoa中,NSArray类管理的是对象集合。
它的description
方法调度
当代码发送消息时,Objetive C的方法调度程序将在当前类中搜索相应的方法。
如果高度程序无法在接收消息的对象类中找到相应的方法,它就在该对象的超类中进行[。
[shape setFillColor:kRedColor] Objective -c 方法调度程序将查找接收该消息的对象Circle类有一个指向其它代码的指针,
消息
实例变量
创建一个新类时,其对象首先从自身的超过类中继承实例变量,然后添加它们自己的实例变量。
@interface RoundedRectagnle : shape
{
int radius;
}
@end
内存布局
继承在子类和超类之间建立了一种"isa"关系, 所以NSobject的实例变量称为isa
使用更具体种类的对象,称为多态
每个方法调用都获得一个名为self的隐藏参数,它是一个指向接收消息的对象的指针方法使用self参数来查找它们要使用的实例变量 ,