----------------------
ASP.Net+Unity开发、
.Net培训、期待与您交流! ----------------------
官方的语法和使用如下:
关键字用来指明对象是当前方法的接收者。
例如下面是一个子类(正方形)的方法实现:
利用其父类(长方形)的setWidth: andHeight:方法来实现的。
1> 使用 "self->成员变量名" 访问当前方法调用的成员变量
2> 使用 "[self 方法名];" 来调用方法(对象方法\类方法)
类方法中用self调用对象方法,对象方法中用self调用类方法
self死循环;
----------------------
ASP.Net+Unity开发、
.Net培训、期待与您交流! ----------------------详细请查看:
www.itheima.com
self的使用:
官方的语法和使用如下:
关键字用来指明对象是当前方法的接收者。
例如下面是一个子类(正方形)的方法实现:
- (void)setSide : (int)s
{
[self setWidth : s andHeight : s]
}
{
[self setWidth : s andHeight : s]
}
利用其父类(长方形)的setWidth: andHeight:方法来实现的。
调用消息的类可以不知道如何响应这个消息。如果它不知道如何处理这个消息,它会自动的将这个消息转给的父类,还不行就转给父类的父类,都没有找到就会报错。
出现的地方:所有的OC方法中(对象方法\类方法),不能出现在函数
作用:
1> 使用 "self->成员变量名" 访问当前方法调用的成员变量
2> 使用 "[self 方法名];" 来调用方法(对象方法\类方法)
低级错误:用self去调用函数
类方法中用self调用对象方法,对象方法中用self调用类方法
self死循环;
例如:
@interface Person : NSObject
{
int _age;
}
- (void)test1;
+ (void)test;
@end
@implementation Person
- (void)test1
{
NSLog(@"此人是%d岁", _age);
[self test];
}
+ (void)test
{
NSLog(@"此人是%d岁", _age);
/*调用的是类方法,此时self是Person此时会造成程序崩溃,因为Person下的test1找不到,*test1是属于对象的方法,不是类方法, *这里要特别注意*/
[self test1];
}
@end
int main()
{
[Person test];
return 0;
}
其实编程语言基本上都是共通的,就现在oc里面的self和c++里面的this是一样的,都是指向对象本身的指针,用起来都是挺方便的。在c++里,几乎默认加上了this指针,而oc需要用户自己使用,是什么对象调用了当前的方法,self就代表那个类或者对象,这是视情况而定的,如果调用方法的是类,self就是指向类,通俗点就是“谁调指谁”。另外需要注意的是在对象里面访问当前对象内部成员变量是需要用“self->成员变量名”这样的方式使用。[self 方法名]这样可以调用其他对象方法。不过值得注意的是要区分self当前到底是属于哪个对象或者类,否则很容易出错的。