前言:OC中有一个self关键字,用法跟Java中的this类似,都是代表着当前方法的调用者。但self和this还是有区别的
1、 java中的this只能在动态方法中,静态方法中不能使用;
2、 OC中的self既可以在动态方法中,也可以用在静态方法中;
一、Java中的this只能用在动态方法中,不能用在静态方法
1、在动态方法中使用this关键字
public class Student {
private int age;
public void setAge(int age) {
this.age = age;
}
}
这里的this代表着调用setAge方法的某个Student对象
2、要是在静态方法中使用this,会直接报错
二、OC中的self既可以用在动态方法中,也可以用在静态方法中
1、self在动态方法中
@implementation Student
- (void)test2 {
}
- (void)test3 {
[self test2];
}
@end
self关键字,这里的self代表着调用test3方法的某个Student对象
第8行代码的作用是调用Student对象的动态方法test2
2、self在静态方法中
@implementation Student
+ (void)test2 {
}
+ (void)test3 {
[Student test2];
[self test2];
}
@end
这里定义的是静态的方法,看方法前面的符号“+”,在前面我们知道:
self代表着当前方法的调用者。当前方法是test3,那test3的调用者是谁呢?(静态方法)肯定是Student这个类,因为test3是个静态方法。因此这里的self代表着Student这个类.
因此,第8行、第10行的作用是一样,都是调用了静态方法test2
3、总结
1> 在动态方法中,self代表着"对象"
2> 在静态方法中,self代表着"类"
3> 一句话总结就是:self代表着当前方法的调用者
感谢互联网~~