简书链接:第二篇objectc中的self和点语法与成员变量声明规范
文章字数:482,阅读全文大约需要1分钟

  1. ios支持.设置语法,但是含义是调用的方法,但是对于java而言这明明叫成员变量直接赋值.
  2. person.age=10实际上调用的是 [xxx setAge:10]
  3. self.age[self age]调用的依然是setAge()getAge()的方法,而不是直接访问成员变量,也就是说访问成员变量不需要加上self
  4. 据说建议用_开头代表成员变量,以避免冲突,安卓一般是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开发,太封闭也就算了,导致很多优点都没有,甚至开发工具也很难用,行尾行首快捷键 其中行首没有移动到代码前面,而是最最前面,其它开发工具此快捷键可是没有这个毛病的.