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];
数据第一,函数第二是面向对象的精髓。