黑马程序员技术交流社区

标题: self小结 [打印本页]

作者: zhuozhuo    时间: 2015-9-18 23:44
标题: self小结
在oc的学习过程中,我们都会碰到无头绪的self。一般会在init构造函数或者方法的实现中用的较多。
分析self时,记住一句话:谁调用该函数,self就指谁。
下面以简单的几行代码分析下
一方法的实现
-(void) setAge:(int)newAge
{
  [self setNewAge:newAge];
}
Person *xiaoming=[[Person alloc]init]; //Person类,实例化一对象xiaoming
[xiaoming setAge:30];  //调用setAge方法
当调用setAge方法是,编译器会将[xiaoming setAge:30];翻译成C语言的函数,_person_setAge(xiaoming,30);里边包含"xiaoming"这个指针和“30”这个参数。编译器将xiaoming指针赋给self,也就是说[selfsetNewAge:newAge];等价于[xiaoming setNewAge:30];xiaoming这个实例对象在调用setNewAge方法,则self指小明。
那此时,我们可能会想,直接写成[xiaoming setNewAge:30];就行了嘛。行是行,不过,这个setAge函数它就定型给了xiaoming,假如又实例化了xiaozhang,xiaowang等对象,那你的set函数就具有"私有性质"不能达到通用的效果。当你用上self时,很明确一点谁调用函数,self给谁。由此可见,self是不可或缺的。
另外加一点:
self的应用可用在实例方法“-”中和类方法“+”中。当在类方法中时,self指代该类。但意义相同,谁调用self指谁。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2