1) -/+: 这个称做scope, 如果在函数前面是- ,那么理解为一般的函数;如果是+, 可以理解为c++中的static函数
2) 函数的参数声明:
如果没有参数的话,在函数名后面,可以什么都不写;
如果只有一个参数,在 : 后面声明参数的类型和名称;
如果有多个参数的话,每个参数前面都要有一个 : , 然后接着是参数类型和参数名称。
在objective c中,对于有多个参数的函数,我们可以理解为将函数的名称拆成了几个部分,每个部分都是对紧接着的参数的一个解释。比如在C++中:void initializeRectangle(int x1, int y1, int x2, int y2) , 但是我们并不知道这些参数都是什么意思;但是在objective c中,我们可以这样声明:void initializeRectangeWithLeftUpX: (int)x1 LeftUpY: (int)y1 RightBottomX: (int)x2 RightBottomY:(int)y2;
3)函数定义和调用
Object-C的函数定义和调用都比较特别,为了让对象执行某个操作,需要向对象发送消息,因此,函数的调用被称作Object Messaging。其消息的定义是[Receiver Message],前者是接收消息的对象,后者是消息的本身。此处先看看函数的定义:
函数的定义由函数的类型标记(Method type identifier)、返回值(return type)、一个或者多个的函数签名关键字(Method signature)、参数的类型和命名信息组成。
函数的真实命名由各个级联的函数签名关键字组成。例如上述函数定义中函数真实的命名是(insertObject:atIndex:)分号隔开参数的声明。局部的函数签名关键字看起来更像是函数参数的内部命名,真正的参数命名反而在Object Messaging中不出现。例如,上述的函数调用可以写成
[myArray insertObject:anObject atIndex:0];
再来看一个例子,前一行是函数的定义,后面一行是函数的调用,可以看到后面的调用Ojbect Messaging中,写的是函数方法签名的关键字
(Method signature keywords)而不是参数命名(parameter names)。由于没有特别的函数名一项,注意其第一个函数方法签名关键字的
命名看起来就像函数名(changeColorTo)+第一个参数(Red)
- (int)changeColorToRed:(float)red green:(float)green blue:(float)blue;
[myColor changeColorToRed:5.0 green:2.0 blue:6.0];