1、使用点语法代替传统的get方法和set方法
// 设置age的值
stu.age = 10; // 等价于[stu setAge:10];
// 取出age的值
int age = stu.age; // 等价于int age = [stu age];
- 注意,把原来的[stu setAge:10]替换成了stu.age = 10。听清楚了,这两种写法是完全等价的。即这里的stu.age并不是代表直接访问stu对象的成员变量age,而是编译器遇到stu.age = 10的时候会自动将代码展开成[stu setAge:10]
再说,如果是直接访问成员变量的话,OC中应该是这样的语法:stu->age,而不是stu.age。
- 注意,把原来的int age = [stu age]替换成了int age = stu.age。这两种写法又是完全等价的,stu.age并不是直接访问stu对象的成员变量age,而是编译器遇到int age = stu.age的时候会自动将代码展开成int age = [stu age]
- OC点语法的本质是方法调用,不是直接访问成员变量。 至于这个点语法代表的是get方法还是set方法,那就取决于你是取值还是设值,取值就是get方法设值就是set方法。
2、点语法与self陷阱
不能用self.变量调用setter方法,这样会造成循环调用。比如:
-(void)setAge:(int)newAge
{self.age = newAge;
}
这样相当于
-(void)setAge:(int)newAge
{[self setAge:newAge];
}
很明显,会造成循环调用setAge:方法,程序就这样崩溃了
3、实例变量名加_, 比如_age
我们可以在声明实例变量时加_,然后getter方法名不加,这样就知道 stu.age确实是调用的age的getter方法,而不是访问了实例变量 _age 了。
参考:http://www.cnblogs.com/mjios/archive/2013/04/08/3006577.htmlv