- 如果给属性提供了getter和setter方法, 那么访问属性就又多了一种访问方式 , 点语法
- 点语法其实它的本质是调用了我们的setter和getter方法
- 点语法是一个编译器的特性, 会在程序翻译成二进制的时候将.语法自动转换为setter和getter方法
- 如果点语法在=号的左边, 那么编译器会自动转换为setter方法
-
如果点语法在=号的右边, 或者没有等号, 那么编译器就会自动转换为getter方法
dyf.png
3.点语法注意
-
点语法的本质是方法的调用,而不是访问成员变量,当使用点语法时,编译器会自动展开成相应的方法调用。
-
切记点语法的本质是转换成相应的对setter和getter方法调用,如果没有set和get方法,则不能使用点语法。
-
不要在getter 与 setter方法中使用本属性的点语法
- (void) setAge:(int)age {
// 下面的代码会引发死循环
self.age = age;
//编译器展开后 [self setAge:age]
}
- (int) age {
// 下面的代码会引发死循环
return self.age;
// 编译器展开后 [self age]
}
网友评论