Set函数、Get函数、点语法和类方法
1.Set函數
setter函數,對成員變量賦值。Set函數的一般寫法以對age操作為例,寫法為:
-(void)setAge:(int)newage。
2. Get函數
getter函數,對成員變量取值。Get函數的一般寫法也以對age的操作為例,寫法為:
-(int)age;
3. 點運算符在OC的類對象中不能訪問成員變量,如dog.age=5,這里不是使用成員變量age,而是調用成員方法setAge,相當于給dog.age賦值時,調用方法[dog setAge:5]。
NSLog(@”%d”,dog.age); 這里也不是使用成員變量age,而是調用成員方法age,使用dog.age表達式的值時,實際上就是調用成員方法age,[dog age]。
“. ”不能調用成員變量,只是調用set函數和get函數的一種簡寫。這里不能理解為,定義了get函數和set函數就能調用成員變量,因為將這兩個函數,不以一般形式書寫時,使用dog.age時,就會報錯。
4. @property 和@synthesize
定義set函數和get函數時,我們會發現多個成員變量定義時,會做許多重復的工作,OC為了方便,將這種方法封裝起來,我們可以使用@property來聲明set和get函數,使用@synthesize來實現set函數和get函數。同樣以Dog類的成員變量age為例。
-(void)setAge:(int)newage;
-(int)age;
這兩個函數使用@property,可以寫為 “@property int age;”,這樣大大減少了重復性工作。
聲明后實現函數,一般的實現方式為:
-(void)setAge:(int)newage
{
age=newage;
}
-(int)age
{
return age;
}
同樣使用@synthesize可以簡化為“@synthesize age;”
5. set和get函數的名稱與變量名不同,但同時使用點語法
1 函數與變量名不同,使用@property和@synthesize
@property secondnum;
@synthesize secondnum=b;
實現的時候關聯,聲明的時候不用管。這時,可以使用“對象.sencondnum”對b進行賦值和取值。
2 set函數和get函數名稱不對應
將“@property int d;”改為“@property (getter = d1st) int d;”
“@synthesize d”不變,賦值和調用時就不同了,賦值時為“對象.d=1”,取值時就為“對象.d1st”。這里只是添加了一個新名,不是代替原有的“對象.d=1”,但是[對象 setA]就不能使用了。
3 @property(setter=set2nd: ;getter=d1st) int d;
這里將getter和setter函數都增加了新名字,這里必須注意的是,set函數的名字格式必須為“setXXXX:”,一定不能忘記冒號,用逗號隔開get函數,這兩個函數不分前后。
“@synthesize d;”不變。
4 @property(readonly) int d;
()里的內容稱為property的屬性,若屬性為readonly,則只聲明get函數,不聲明set函數,默認為readwrite。沒有聲明set函數@synthesize就不會實現set函數。
6. 函數前的“+”與“-”
OC中常見函數名稱前面常帶有“+”和“-”,這里的加減號分別代表了不同的方法類型。
+ 代表 函數為類的函數,調用時用類名調用。
- 代表 函數為對象的函數,調用時需用對象調用。
類沒有空間,沒有成員變量的空間,類的方法不能使用對象的成員變量。
用處: 1 在沒有對象的時候,調用+函數創建一個對象。
2 單例模式。可以看為全局變量的升級版。一個類的對象為其他類的所有對象所共有。(下階段深化!!)
轉載于:https://blog.51cto.com/rongchengfei/1082143
總結
以上是生活随笔為你收集整理的Set函数、Get函数、点语法和类方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这7个在线工具,帮助您快速开发WordP
- 下一篇: +操作符重载(2)