黑马程序员_OC中的self

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

 

self的使用:


    官方的语法和使用如下:

    关键字用来指明对象是当前方法的接收者。

    例如下面是一个子类(正方形)的方法实现:
 
    - (void)setSide : (int)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当前到底是属于哪个对象或者类,否则很容易出错的。
 
 
---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------详细请查看: www.itheima.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值