2014/12/22 夜

今天先看了C的面向对象,再继续看Obj-C明白了新的OOP知识。

用@interface创建类,继承自NSObject,也成为接口/API

@interface Circle:NSObject

{

@private  //私有,只能在这个类里面调用,对应的有可以让继承的类用的@protected和全局都能用的@public

ShapeColor fillcolor;  //fillcolor是一种类型叫ShapeColor的型,它是实例变量跟bounds一样

ShapeRect bounds;

}

-(void)setFillColor:(ShapeColor) fillcolor;  //声明一个方法,不返回值,需要ShapeColor类型的参数,参数名叫fillcolor

-(void)setBounds:(ShapeRect) bounds;

@end

 

用@implementation定义实现,是编译器指令

@implementation Circle  //此处没有分号

-(void)setFillColor:(ShapeColor) c

{

fillcolor=c;  //此时参数名为c,不命名成实例变量的名称,不然会覆盖了fillcolor

}

-(void)setBounds:(ShapeRect) b

{

bounds=b;

}

@end

有个问题,书上既然说@implementation里面可以定义@interface里面没有的声明过的方法,这样定义了有什么用?

 

创建一个新的对象,需要给他分配空间,给它传递new的消息

eg:  

id shapes[3];

ShapeRect rect0={0,0,30,30};//定义一个rect的Shaperect类型并给值

shape[0]=[Circle new];//实例化对象

[shape[0] setBounds:rect0];

[shape[0] setFillColor:kRedColor];

 

数据第一,函数第二是面向对象的精髓。