objective-C笔记(二)

阅读更多
void drawShapes(Shape shapes[],int count){
	int i;
	for(i=0;i< count;i++){
		id shape=shapes[i];
		[shape draw];
	}
}

 1.shapes为一个类型是Shape的结构体数组。

 

id shape=shapes[i];

id 为一个指向其中某个结构的指针。

		[shape draw];

表示对对象shape做draw操作(向shape发送消息draw)。

 

2.

@interface Circle:NSObject{
	ShapeColor fillColor;
	ShapeRect bounds;
}

-(void) setFillColor:(ShapeColor) fillColor;
//[circle setFillColor: fillColor]
-(void) setBounds: (ShapeRect) bounds;
//[circle setBounes:bounds]
-(void) draw;
//[circle draw]

@end

     这里定义了一个名为Circle并继承自NSObject的接口,其中包含了两个属性,分别死color和bounds;三个方法声明。方法声明和函数原形的区别在于是否有先行短线"-" 。

-(void) setFillColor:(ShapeColor) fillColor;

方法声明的结构为:

   - (返回类型)方法名[:(参数类型) 参数1值名 参数2名:(参数类型) 参数2值名 ...]

方法调用(中缀符的使用):  

[circle setFillColor: fillColor]   

 

意思同:

 

circle.setFillColor(fillColor);

 如果是多个参数:

 

[textThing setStringValue: @"hello there"
     color: kBlueColor];

 @"hello there"和 kBlueColor都为传入的参数 (?setStringValue和color是参数名还是方法名的一部分?)

 

3.Circle的实现

 

@implementation Circle

-(void) setFillColor:(ShapeColor) c{
	//fillColor=c;
	self->fillColor=c;
}//set color

-(void) setBounds:(ShapeRect) b{
	bounds=b;
}//set bounds

-(void) draw{
	NSLog(@"draw a circle at (%d,%d,%d,%d) in %@ ",bounds.x,bounds.y,bounds.width,bounds.height,colorName(fillColor));
}
@end

 和声明差别不大,对原先的方法做了具体的实现。

self->fillColor=c;

self是一个隐藏传送的参数,代表消息接收对象本身。

 

4.Circle的实例化

[Circle new]

 objective-c中可以把类当成对象一样来发送消息。

 

 

 

你可能感兴趣的:(Objective-C,C,C++,C#)