A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhuozhuo 中级黑马   /  2015-9-18 23:44  /  623 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在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指谁。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马