点语法

一:格式:对象名.属性名
此时(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方法,则不能使用点语法。

 

posted @ 2015-12-07 10:36  MY0101  阅读(172)  评论(0编辑  收藏  举报