合成存取方法 Objective-C從 OC 2.0版本開始,自動合成了setter 方法和 getter 方法。而且,如果開發者需要自己控制某個setter 方法和 getter 方法的實現時,可以自己提供 setter 方法和 getter 方法,自己提供的setter 方法和 getter 方 ...
--------合成存取方法--------
- Objective-C從 OC 2.0版本開始,自動合成了setter 方法和 getter 方法。而且,如果開發者需要自己控制某個setter 方法和 getter 方法的實現時,可以自己提供 setter 方法和 getter 方法,自己提供的setter 方法和 getter 方法會覆蓋系統自動合成的相應方法。
- 需要編譯器自動合成 setter 方法和 getter 方法需要在需要生成方法的屬性面前加上 @property (必須) 和 @synthesize(可以省略) 指令。(例: @property int numerator; @synthesize numerator = _numerator; // =_numerator 可以省略)
- 其實並不需要使用 @synthesize 指令,使用 @property 指令就足夠了。編譯器會自動為你生成 setter 和 getter 方法。但是,註意,如果你不使用 @synthesize 那麼編譯器生成的實例變數會以下劃線(_)字元作為其名稱的第一個字元。
- 使用合成存取方法,屬性名稱的前面不要以 new 、alloc 、copy 或者 init 這些詞開頭。這與編譯器的一些假定有關。
/* @property 可以使用的一些指示符
1.readonly:系統只合成getter方法,不再合成setter方法。
2.readwrite:系統合成getter和setter方法,預設是這樣。
3.strong:指示符指定該屬性對被賦值對象持有強引用(只要該強引用指向被賦值的對象,那麼該對象就不會被自動回收)。多用在 其他對象(除代理\UI控制項\字元串以外的對象)
4.week:指示符指定該屬性對被賦值對象持有弱引用(即使該弱引用指向被賦值的對象,該對象也可能被回收)。多用在 代理\UI控制項
5.unsafe_unretained:類似於week,不同是指針所引用的對象回收之後,該指針不會被賦值為nil,該指示符極少用。
6.copy : 多用在字元串類型
7.assign : 多用在非對象類型(基本數據類型int\float\BOOL\枚舉\結構體)
*/
--------局部變數和全局變數--------
- 局部變數:在還是內部定義的變數
- 作用域:從定義變數開始,到代碼塊結束
- 生命周期:定義開始到代碼塊結束,就會被回收
- 函數的形參也是局部變數
- 無固定初值
- 局部變數沒有記憶力。方法內定義的局部變數只會在方法內有效,當方法返回時,這些變數的值都消失了。每次調用方法時,該方法內的局部變數(如果有的話)都是用變數聲明重新初始化一次。(等於重新分配了一塊存儲數據的記憶體空間,以前局部變數所擁有的空間已經被回收、銷毀,不會再次擁有)
- 全局變數:函數外面定義的變數
- 作用域:定義開始到文件結尾(能被後面所有函數共用)
- 生命周期:程式一開始就分配記憶體,到程式退出才銷毀
- 預設的初值為0
- 全局變數有自己的記憶力
- static 關鍵字:
- 在變數聲明前加上 static 關鍵字,可以使局部變數保留多次調用一個方法所得的值。(即 存儲數據的記憶體空間不會被回收與銷毀,會記錄下局部變數所擁有的數據,在下一次需要這個局部變數時將會返回唯一的存儲數據的記憶體地址,和原有的數據)