1、使用點(diǎn)語法代替?zhèn)鹘y(tǒng)的get方法和set方法
// 設(shè)置age的值
stu.age = 10; // 等價(jià)于[stu setAge:10];
// 取出age的值
int age = stu.age; // 等價(jià)于int age = [stu age];
- 注意,把原來的[stu setAge:10]替換成了stu.age = 10。聽清楚了,這兩種寫法是完全等價(jià)的。即這里的stu.age并不是代表直接訪問stu對(duì)象的成員變量age,而是編譯器遇到stu.age = 10的時(shí)候會(huì)自動(dòng)將代碼展開成[stu setAge:10]

再說,如果是直接訪問成員變量的話,OC中應(yīng)該是這樣的語法:stu->age,而不是stu.age。
- 注意,把原來的int age = [stu age]替換成了int age = stu.age。這兩種寫法又是完全等價(jià)的,stu.age并不是直接訪問stu對(duì)象的成員變量age,而是編譯器遇到int age = stu.age的時(shí)候會(huì)自動(dòng)將代碼展開成int age = [stu age]

Paste_Image.png
- OC點(diǎn)語法的本質(zhì)是方法調(diào)用,不是直接訪問成員變量。 至于這個(gè)點(diǎn)語法代表的是get方法還是set方法,那就取決于你是取值還是設(shè)值,取值就是get方法設(shè)值就是set方法。
2、點(diǎn)語法與self陷阱
不能用self.變量調(diào)用setter方法,這樣會(huì)造成循環(huán)調(diào)用。比如:
-(void)setAge:(int)newAge
{self.age = newAge;
}
這樣相當(dāng)于
-(void)setAge:(int)newAge
{[self setAge:newAge];
}
很明顯,會(huì)造成循環(huán)調(diào)用setAge:方法,程序就這樣崩潰了
3、實(shí)例變量名加_, 比如_age
我們可以在聲明實(shí)例變量時(shí)加_,然后getter方法名不加,這樣就知道 stu.age確實(shí)是調(diào)用的age的getter方法,而不是訪問了實(shí)例變量 _age 了。
參考:http://www.cnblogs.com/mjios/archive/2013/04/08/3006577.htmlv