点语法
一:格式:对象名.属性名
此时(p.age)并不是直接访问实例变量
而是xcode 读取到点语法(p.age)后,会自动替换成set和get方法
p.age = 18; 点语法在 = 左边,则替换成set方法,p.age = 18等价于[p setAge : 18]
int a = p.age; 点语法在 = 右边,则替换成get方法,int a = p.age等价于[p age]
点语法实质上是xcode帮我们做的代码替换。
总结:p.age 到底是替换成get 方法还是set方法,一般取决于p.age出现在等号左侧还是右
侧(设置值,还是取值)
NSLog(@"%d", p.age); //此时为取值,所以调用get方法
二:点语法陷阱:
self.属性名
-(void)setAge : (int) newAge{ self.age = newAge; } //点语法的本质是方法调用,所以上相当于: -(void)setAge:(int)newAge{ [self setAge:newAge]; //造成死循环 }
在get方法中:
return self.age;
//相等于
return [self age]; //也会造成死循环
点语法注意:
点语法的本质是get和set方法的调用,而不是访问成员变量,当使用点语法时,编译器会自动展开相应的方法。如果没有set和get方法,则不能使用点语法。