Objective-C中,调用方法被称为发送消息,通知对象执行某种操作
先看一段类声明(接口):
@interface Circle : NSObject
{
ShapeColor fillColor;
ShapeRect bounds;
}
-(void) draw; //1.
-(void) setFillColor: (ShapeColor) fillColor; //2.
-(void) setBounds: (ShapeRect) bounds; //3.
@end
方法声明
第1个,前面的短线表明这是Objective-C方法的声明,这是一种区分函数原型与方法声明的方式,函数原型中没有先行短线。短信后面是方法的返回类型,位于圆括号中(Objective-C中没有public和private的概念,你可以认为全是public,它只有类方法和实例方法,+表示是类方法,类方法可以直接调用,而不用插U那个键这个类的实例,-表示实例方法,需要创建这个类的实例对象才可以调用)
类对象包含了指向超类的指针、类名和指向类方法列表的指针,类对象还包含一个long型数据,为新创建的类实例对象指定大小(以字节为单位)
如果使用了+,就是把这个方法定义为类方法,这个方法属于类对象并且通常用于插u功能键新的实例,我们称这种用来插u那个键新对象的类方法为工厂方法。
类对象可以用来访问全局数据,APPKit中的NSColor类有一些以不同颜色命名的类方法,如redColor和blueColor,要用蓝色绘图,可以像这样编写代码:
NSColor * haveTheBlues =[NSColor blueColor];
用减号:这些方法将会在某个对象实例中运行,比如获取i个Circle的颜色或者一个Tire的气压
用加号:实现常规功能,比如创建一个实例对象或者访问一些全局类数据
Objective-C可以返回与C函数相同的类型:标准类型(整型、浮点型和字符型)、指针、对象引用和结构
第2个,方法的名称是setFillColor: ,结尾处的冒号是名称的一部分,它告诉编译器和编程人员后面会出现参数。参数是某个ShapeColor值,fillColor是参数名
注意:方法的声明在括号后面,@end之前 。{}
注意冒号
冒号是方法名称非常重要的组成部分,如果方法使用参数,则需要冒号,否则不需要冒号
中缀符
Objective-C中有一种名为中缀符(infix notation)的语法技术。方法的名称及其参数都是和在一起的。例如你可以这样调用带一个参数的方法:[circle setFileColor: kRedColor];
带两个参数的方法调用如下:
[textThing setStringValue: @"hello there" Color:kBuleColor];//textThing 表示什么意思?
setStringValue:和setFillcolor:实际上是参数的名称(实际是方法名称的一部分)
@“hello there”和kBuleColor是被传递的参数
这种语法和C不同,在C中调用函数时,是把所有的参数都放在函数名之后,如下所示
setTextThingValueColor(textThind,@"hello there",kBuleColor);
中缀符使代码可读性更强,更容易理解参数的用图