程式設計筆記 objective c 關於屬性

2021-08-26 21:48:23 字數 3369 閱讀 2203

在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...