Objective-C方法与函数的区别
- 方法是唯对象所有
- 函数是不依赖于对象存在的
方法 | 函数 |
---|---|
- (void)test; | void test(); |
方法是以减号 - 开头 | - |
类型要用()括起来 | - |
声明必须写在@interface-@end之间,实现必须写在@implementation-@end之间 | 可以写在文件中的任意位置 |
只能由对象来调用 | - |
可以直接访问成员变量 | 不可以直接访问成员变量 |
Objective-C成员方法与类方法的区别
- 成员方法是以减号 “-” 开头
- 类方法是以加号 “+” 开头
成员方法 | 类方法 |
---|---|
- (void)test; | + (void)test; |
- 成员方法必须使用对象调用
- 类方法可以直接使用类名调用
总结
- OC成员方法就好比Java里的非静态方法,需要使用对象调用
- OC类方法就好比Java里的静态方法(static),可以使用类名直接调用
- 一般工具类使用类方法比较多
带有返回值的方法
Objective-C
-
声明
@interface NumUtil : NSObject - (double)pi; @end
-
实现
@implementation NumUtil - (double)pi { return 3.14; } @end
-
调用
NumUtil *n = [NumUtil new]; NSLog(@"%f",[n pi]);
Java
-
Java类
大概是这样
public class NumUtil{ public double pi(){ return 3.14; } }
-
调用
NumUtil numUtil = new NumUtil; numUtil.pi();
带有一个参数的方法
Objective-C
-
声明
@interface NumUtil : NSObject - (int)square:(int)num; @end
-
实现
@implementation NumUtil - (int)square:(int)num; { return num * num; } @end
-
调用
NumUtil *n = [NumUtil new]; NSLog(@"%d",[n square:2]);
Java
-
Java类
大概是这样
public class NumUtil{ public int square(int num){ return num * num; } }
-
调用
NumUtil numUtil = new NumUtil; numUtil.square(2);
带有多个参数的方法
Objective-C
-
声明
@interface NumUtil : NSObject - (int)addNum1:(int)num1 addNum2:(int)num2; @end
-
实现
@implementation NumUtil - (int)addNum1:(int)num1 addNum2:(int)num2 { return num1 + num2; } @end
-
调用
NumUtil *n = [NumUtil new]; NSLog(@"%d",[n addNum1:1 addNum2:2]);
Java
-
Java类
大概是这样
public class NumUtil{ public int add(int num1, int num2){ return num1 + num2; } }
-
调用
NumUtil numUtil = new NumUtil; numUtil. add(1, 2);
注意
Objective-C方法名的问题
OC的方法名,和Java有些不同,Java很好理解
OC也不难理解,只是习惯了Java的那种命名方式,看到OC有点不适应举个例子:
-
- (double)pi;
这个很好理解,方法名就是 pi
-
- (int)square:(int)num;
带参数的方法名有点特殊了
首先说冒号“:”,冒号后面的一定是参数
可以理解成,有几个冒号,就有几个参数
把空格后面到参数前面的内容拼起来(不算类型),就是方法名
那么,这个方法的方法名就是square:,(注意:是有冒号的) -
- (int)addNum1:(int)num1 addNum2:(int)num2;
根据上面的方法
这个方法的方法名就是 addNum1:addNum2:其实很好理解,就是把每个参数的描述加上冒号拼接到一块,组成方法名,方便阅读
XCode查看方法名也很方便