在c++中,通常需要編寫getter和setter方法來獲取或者是設定例項變數的值。這兩種方法需要在程式中顯示的完成。這種方式在objective-c中也是適用的。但是objective-c提供了一種更為便捷的方式來完成這種功能。它就是屬性。和c++中的顯示的getter和setter方法相比,屬性機制使得getter函式和setter來的更容易和更簡化。
objectivc-c中的屬性是通過關鍵字@property來宣告的。
例如,有類如下:
student.h檔案:
[cpp]view plain
copy
#import
@inte***cestudent:nsobject
-(id)initwithname:(nsstring*)anamemath:(float
)scoremathenglish:(
float
)scoreenglish;
-(nsstring*)getname;
-(float
)getmath;
-(float
)getenglish;
@end
student.m檔案:
[cpp]view plain
copy
#import"student.h"
@implementationstudent
-(id)init
return
self; }
-(id)initwithname:(nsstring*)anamemath:(float
)scoremathenglish:(
float
)scoreenglish
return
self; }
-(nsstring*)getname
-(float
)getmath
-(float
)getenglish
-(void
)dealloc
@end
main.m檔案如下:
#import
[cpp]view plain
copy
#import"student.h"
intmain(
intargc,
const
char
*argv)
上面程式的輸出結果如下:
name:mark
math:80.000000
math:100.000000
上面的程式是通過c++中的方式來編寫getter方法來獲取私有的例項變數的值。這些個getter方法實現雖然簡單,但是必需有程式設計師顯示書寫來完成。應用屬性機制後,程式如下:
student.h檔案:
[cpp]view plain
copy
#import
@inte***cestudent:nsobject
@propertynsstring*name;
@propertyfloat
math;
@propertyfloat
english;
-(id)initwithname:(nsstring*)anamemath:(float
)scoremathenglish:(
float
)scoreenglish;
//-(nsstring*)getname;
//-(float)getmath;
//-(float)getenglish;
@end
student.m檔案:
[cpp]view plain
copy
#import"student.h"
@implementationstudent
@synthesizename;
@synthesizemath;
@synthesizeenglish;
-(id)init
return
self; }
-(id)initwithname:(nsstring*)anamemath:(float
)scoremathenglish:(
float
)scoreenglish
return
self; }
//-(nsstring*)getname //
////-(float)getmath //
////-(float)getenglish //
////-(void)dealloc //
@end
main.m檔案如下:
[cpp]view plain
copy
#import
#import"student.h"
intmain(
intargc,
const
char
*argv)
程式的輸出如下:
name:mark
math:80.000000
math:100.000000
可見屬性機制使得程式更加簡潔明瞭。
上面程式中引入了新的關鍵字@synthesize,這個關鍵字告訴編譯器自動為其後面的屬性生成getter()和setter()方法。需要注意的一點是雖然在描述上適用的是「自動生成getter()和setter()方法」,但是實際上我們並看不到生成的對應**。需要明確的是編譯器自動生成的getter方法:name(),math(),english()以及sette方法:setname(), setmath(), setenglish()的呼叫完全和普通的方法是一樣的。例如我們可以修改上面的main()函式如下:
[cpp]view plain
copy
#import
#import"student.h"
intmain(
intargc,
const
char
*argv)
程式輸出為:
name:tony
math:99.000000
math:89.980003
程式設計筆記 objective c 關於屬性
在c 中,通常需要編寫getter和setter方法來獲取或者是設定例項變數的值。這兩種方法需要在程式中顯示的完成。這種方式在objective c中也是適用的。但是objective c提供了一種更為便捷的方式來完成這種功能。它就是屬性。和c 中的顯示的getter和setter方法相比,屬性機制...
程式設計筆記 objective c 關於屬性
在c 中,通常需要編寫getter和setter方法來獲取或者是設定例項變數的值。這兩種方法需要在程式中顯示的完成。這種方式在objective c中也是適用的。但是objective c提供了一種更為便捷的方式來完成這種功能。它就是屬性。和c 中的顯示的getter和setter方法相比,屬性機制...
程式設計筆記 objective c 宣告屬性
屬性的宣告使用關鍵字 property。屬性的宣告可以是在 inte ce類中的方法宣告塊的任何地方。property同樣也可以在protocal 協議 和category 種類 中。其通用形式如下 property attributes type name 由於英文property和attribu...