1. 程式人生 > >@property、@synthesize關鍵字和點語法

@property、@synthesize關鍵字和點語法

在面向物件程式設計的時候,我們常會為物件的一些屬性寫上set、get方法(設定器和訪問器),而不直接訪問成員變數,這樣一來提升了安全性(不太懂),二來可以在設定和訪問的時候加上判斷,過濾不符合條件的值。
當屬性比較多的時候,為每個屬性寫設定器和訪問器方法比較繁瑣,可用@property、@synthesize簡化設定器和訪問器,在程式執行時動態生成get和set方法。


OC中的點語法與Java不太一樣,本質是進行了方法的呼叫,並不是直接為成員變數賦值。
OC中get有特殊含義,因此訪問器不用get命名。
<span style="font-family:Microsoft YaHei;font-size:14px;">stu.age = 20;  //等價於 [stu setAge:20];
int age = stu.age;  //等價於 int age = [stu age];</span>
訪問成員變數使用的是“->”而不是“.”,例如stu->age。

點語法+self容易產生的坑:
<span style="font-family:Microsoft YaHei;font-size:14px;">- (void)setAge:(int)newAge {
	self.age = newAge;  //等價於 [stlf setAge:newAge];
}</span>
熟悉Java的同學會這樣寫,就產生了死迴圈。為了區分點語法和成員變數訪問,一般成員變數會以下劃線_開頭,如_age。