OC学习,self使用总结和注意事项,理解类和对象,使用self进行理解非常好
2015-07-23 17:39
525 查看
self 谁调用当前方法,self就代表谁
1.self在对象方法中,self代表当前对象
2.self 在类方法中,self代表类
self使用注意
同事有对象方法和类方法存在的时候,self不会调错 +号类方法,-号是对象方法
下面放一些学习时候写得代码
1.self用在对象中得情况
.h文件
main函数
2.self用在类的方法
.h文件
.m文件
main函数
3.self在修饰变量中得作用
.h函数
.m函数
此中用法,如果星灿明和成员变量名字相同,可以使用
这个方式带来的帮助就是调bug用,或者利用前人的代码的时候需要留心下!
至此self在类和对象与赋值,面向对象的里面有一定的理解了,self能够帮助理解面向对象的类和对象,也就是我所理解的模板和具体实例,面向对象嘛,以后就直接统一到大家的语法,就是类和对象,实例一个类就会有一个对象new出来嘛!
1.self在对象方法中,self代表当前对象
2.self 在类方法中,self代表类
self使用注意
同事有对象方法和类方法存在的时候,self不会调错 +号类方法,-号是对象方法
下面放一些学习时候写得代码
1.self用在对象中得情况
.h文件
#import <Foundation/Foundation.h> @interface Person : NSObject -(void) run; -(void) eat:(NSString*) foodName; @end.m文件
#import "Person.h" @implementation Person -(void) run { NSLog(@"人在走"); } -(void) eat:(NSString*) foodName{//对象方法是-号开头也就是self是在main函数里new出来的对象 NSLog(@"人在吃%@",foodName); NSLog(@"%p",self);//self在对象方法中使用,指代的是调用当前方法的那个对象,self是指代的p,p的eat,p的run // Person *p1 = [Person new]; // [p1 run]; [self run]; } @end
main函数
#import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... // NSLog(@"Hello, World!"); Person *p = [Person new]; NSLog(@"%p",p); [p run]; [p eat:@"油条+鸡蛋"]; } return 0; }
2.self用在类的方法
.h文件
#import <Foundation/Foundation.h> @interface Person : NSObject +(void) test; +(void) run; -(void) eat; @end
.m文件
#import "Person.h" @implementation Person +(void) test { NSLog(@"+test!"); } +(void) run//类方法是+号,self是类本身 { NSLog(@"\n+人在走!"); //self指代的是当前的类 //self ==Person NSLog(@"\nself = %p",self); //使用类调用类方法 [self test]; //此时self不能调用eat ,eat是对象方法,而self是类 //[self eat]; } -(void) eat { NSLog(@"eat!"); } @end
main函数
#import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepool { Person *p = [Person new]; NSLog(@"\np=%@",p); //[p class] 返回的实质是当前类(类对象) NSLog(@"\nPerson =%p",[p class]); //通过Person调用类方法 [Person run]; } return 0; }
3.self在修饰变量中得作用
.h函数
#import <Foundation/Foundation.h> @interface Dog : NSObject { int _speed; } -(void)setSpeed:(int)speed; -(int)speed; @end
.m函数
#import "Dog.h" @implementation Dog -(void)setSpeed:(int)speed { //函数内部可以定义和全局变量同名的变量 //如果同名,局部变量回暂时屏蔽全局变量的作用域 //局 局 _speed = speed; //self表示访问的是类的实例变量,不加self访问的是局部变量,这就是如上要搞成 speed=speed 不能赋值的原因,self用在实参名和形参名相同的情况下 // self->_speed =speed; } -(int)speed { return _speed; } @endmain函数和set规范
// set方法 书写规范: /* 1)必须以set开头,set后跟的去掉下划线的实例变量并且首字母大写 2)一定有参数 3)不能有返回值 4)一定是对象方法 5)形参名一般是去掉下划线的实例变量 6)形参类型和实例变量的类型一致 7)形参名一般不能和成员变量名相同,如果形同,则通过self访问成员变量 8)在set方法中一定得给实例变量赋值 */ // Created by 李荣闪 on 15/7/23. // Copyright (c) 2015年 SmartWork. All rights reserved. // #import <Foundation/Foundation.h> #import "Dog.h" int main(int argc, const char * argv[]) { @autoreleasepool { Dog *d1 = [Dog new]; [d1 setSpeed:80]; NSLog(@"speed=%d",[d1 speed]); } return 0; }
此中用法,如果星灿明和成员变量名字相同,可以使用
self->_speed =speed;也就是意味着self是对象的speed,这里代码没有改成一样的speed还是使用的是_speed,其实没必要使用self方法,命名时候注意规范就好了,类里面属性加下划线就好了,还有我看swift可以直接自动生成set和get方法。学习oc嘛,写吧!
这个方式带来的帮助就是调bug用,或者利用前人的代码的时候需要留心下!
至此self在类和对象与赋值,面向对象的里面有一定的理解了,self能够帮助理解面向对象的类和对象,也就是我所理解的模板和具体实例,面向对象嘛,以后就直接统一到大家的语法,就是类和对象,实例一个类就会有一个对象new出来嘛!
相关文章推荐
- 字体颜色以及发光字体
- shell exit 0 exit 1
- vim插件介绍
- django安装异常
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第32讲:PHP 构造方法、析构方法
- Java与C++实现相同的MD5加密算法
- Android 可拖拽的GridView效果实现, 长按可拖拽和item实时交换
- Python开发MySQL数据库(表)克隆工具
- Nagios 利用NSClient++的check_nrpe方式使用自定义脚本监控windows
- 关于在jquery动态修改css,html中,mouseenter,mouseleave,click等方法失效的处理
- poj 1094
- ScrollView嵌套ListView解决办法
- Java集合框架新特性
- 5分钟完成网吧服务器系统所有安装,够快了吧!
- spring mvc下载文件
- checkbox 全选和取消
- linux系统-rpm安装
- 零基础大龄“跨界男” 实现月薪三连跳
- crontab 使用注意及处理No Space问题
- 通过vmstat命令判断服务器瓶颈