简书链接:第二篇objectc中的self和点语法与成员变量声明规范
文章字数:482,阅读全文大约需要1分钟
- ios支持
.
设置语法,但是含义是调用的方法,但是对于java而言这明明叫成员变量直接赋值.
person.age=10
实际上调用的是 [xxx setAge:10]
self.age
和[self age]
调用的依然是setAge()
或getAge()
的方法,而不是直接访问成员变量,也就是说访问成员变量不需要加上self
- 据说建议用
_
开头代表成员变量,以避免冲突,安卓一般是m
开头,但是对于model
都没有加任何前缀的.
撸代码
声明文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| // // Teacher.h // 第一个oc程序 // // Created by aaa on 2018/10/6. // Copyright © 2018年 cn.qssq666. All rights reserved. //
#import <Foundation/Foundation.h>
@interface Teacher : NSObject { int _age; long _birthday; } -(void)setAge:(int) age;// 相对于java的setAge(int age); -(int)age;//getAge();
-(long)getBirthdayxx; @end
|
实现文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| // // Teacher.m // 第一个oc程序 // // Created by aaa on 2018/10/6. // Copyright © 2018年 cn.qssq666. All rights reserved. //
#import "Teacher.h"
@implementation Teacher //实现文件不需要用大括号包裹起来. -(void)setAge:(int)age{ _age=age; // self.age=age;//死循环 因为.语法实际上就是调用setAGE } // (void)setAge:(int) age{ // _age=age; // } // 相对于java的setAge(int age); -(int)age{ // return self.age;//调用的就是 getAge()方法,也就是本方法,也是死循环. // return [self age];//也是死循环,调用的依然是方法. return _age; }//getAge(); -(long)getBirthdayxx{ return [self age]+30; } @end
|
调用逻辑
1 2 3 4 5 6
| Teacher *teacher= [ [Teacher alloc] init]; teacher.age=30; [teacher setAge:teacher.age+10]; NSLog(@"teacher age %d , age %d ,birthday %ld:",teacher.age ,[teacher age],[teacher getBirthdayxx]);
|
学习吐槽
依然不习惯,ios,感觉最奇葩的 原因是封闭,无法用window开发,太封闭也就算了,导致很多优点都没有,甚至开发工具也很难用,行尾行首快捷键 其中行首没有移动到代码前面,而是最最前面,其它开发工具此快捷键可是没有这个毛病的.