OC-点语法

1、使用点语法代替传统的get方法和set方法

    // 设置age的值
    stu.age = 10; // 等价于[stu setAge:10];
    
    // 取出age的值
    int age = stu.age; // 等价于int age = [stu age];
    1. 注意,把原来的[stu setAge:10]替换成了stu.age = 10。听清楚了,这两种写法是完全等价的。即这里的stu.age并不是代表直接访问stu对象的成员变量age,而是编译器遇到stu.age = 10的时候会自动将代码展开成[stu setAge:10]

再说,如果是直接访问成员变量的话,OC中应该是这样的语法:stu->age,而不是stu.age。

    1. 注意,把原来的int age = [stu age]替换成了int age = stu.age。这两种写法又是完全等价的,stu.age并不是直接访问stu对象的成员变量age,而是编译器遇到int age = stu.age的时候会自动将代码展开成int age = [stu age]
Paste_Image.png
  • 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

你可能感兴趣的:(OC-点语法)