Objective-C中的setter和getter使用

getter 和 setter 是對(duì)實(shí)例變量的一個(gè)設(shè)置和調(diào)用的作用

平時(shí)我們的實(shí)例變量都是@public的形式,這個(gè)形勢(shì)的實(shí)例變量誰(shuí)都可以去修改谦炬,跟我們現(xiàn)實(shí)中的某種職業(yè)一樣昔榴。

這個(gè)時(shí)候就體現(xiàn)出封裝的作用了逞怨,我定義的實(shí)例變量只能我讓你用,你才能用耍鬓。我讓你怎么去用阔籽,你才能怎么取用。

怎么才能實(shí)現(xiàn)我的霸權(quán)注意呢牲蜀? 這個(gè)時(shí)候@protected的作用的出來(lái)了笆制。我給我的數(shù)據(jù)建立了一個(gè)籠子。如果你要用需要用

我給你的鑰匙才能進(jìn)去用我的東西涣达。這個(gè)就是getter 在辆,如果我想讓你怎么用证薇,你才能怎么用的時(shí)候 這個(gè)就是setter

一、setter和getter的一般寫法

setter和getter器可以說(shuō)是一個(gè)類最基本的東西匆篓,任何一門面向?qū)ο蟮恼Z(yǔ)言浑度,都又這個(gè)概念,C++鸦概、Java等等箩张。因?yàn)閟etter和getter是對(duì)面向?qū)ο笳Z(yǔ)言封裝的最基本的支持。

在Objective-C的setter和getter器窗市,當(dāng)然也和一般的語(yǔ)言沒有什么不同先慷。只不過(guò),添加了一些自己的特性谨设。

比如有一個(gè)實(shí)例變量:int age;

先在.h文件中聲明setter和getter器

-(void)setAge:(int)newAge;

-(int)age;

然后在.m文件中具體實(shí)現(xiàn)

-(void)setAge:(int)newAge

{

age=newAge;

}

-(int)age

{

return age;

}

可以看出來(lái)熟掂,在Objective-C中setter器沒什么區(qū)別,不過(guò)getter器的方法名缺少了get扎拣,因?yàn)間et...在Objective-C有別的用處,所以getter器直接寫的就是變量名素跺。

二二蓝、getter和setter 的調(diào)用方法

一般的調(diào)用方法,是傳統(tǒng)的帶中括號(hào)[? ]的調(diào)用方法指厌,比如

//比如上面的聲明是一個(gè)Person類

Person* person=[[Person alloc]init];

[person setAge:13];

int age=[person age];

點(diǎn)調(diào)用的方式

//點(diǎn)調(diào)用

person.age=13;? //.調(diào)用出現(xiàn)在=號(hào)左邊刊愚,相當(dāng)于setter

int age=person.age? //.調(diào)用出現(xiàn)在=號(hào)的右邊,相當(dāng)于getter

NSLog(@"%i",person.age);//這也是getter

三踩验、setter和getter的改進(jìn)寫法

每次要為一個(gè)屬性寫上getter和setter鸥诽,不得不手十分麻煩,所以有了更簡(jiǎn)單的寫法箕憾,

在.h文件里牡借,直接這樣寫,表示聲明了一個(gè)實(shí)例屬性和它的getter和setter器

@property int age;

然后在.m文件中這樣寫袭异,表示實(shí)現(xiàn)setteer和getter

@synthesize age;

這樣钠龙,就可以和以前一樣調(diào)用getter和setter了。

四御铃、setter和getter的改進(jìn)優(yōu)化

可以看到碴里,getter器的方法名直接就是變量名,方法名和變量名一樣上真,容易讓人迷糊咬腋,所以,可以這樣優(yōu)化睡互。

在.h文件中依然這樣聲明

@property int age;

在.m文件中根竿,這樣去寫溜徙,

@synthesize age=_age; //加上一個(gè)_

//這么,我們就可以去使用_age? 和使用age一樣

-(void)show

{

NSLog(@"%i",_age);

}

五犀填、@property的屬性

可以使用屬性來(lái)規(guī)定@property蠢壹,設(shè)定的方式如下:

@property (attribute1[,attrubute2,...])。

舉個(gè)例子:

@property (nonatomic,strong) Engine* engine;

如果你在@property設(shè)置了屬性九巡,如果你使用@synthesize 图贸,那么它會(huì)自動(dòng)幫你完成這些屬性的實(shí)現(xiàn),如果你是自己手動(dòng)的去完成實(shí)現(xiàn)的話冕广,那么疏日,你必須自己寫出這些屬性的實(shí)現(xiàn)。

(1)撒汉、設(shè)置訪問(wèn)方法的名字

默認(rèn)的getter和setter器的名稱是和變量名關(guān)聯(lián)的沟优,一定是setVirableName和virableName,比如上面的變量age睬辐,setter是setAge挠阁,getter是age。

可以通過(guò)設(shè)置@property中的setter和getter屬性來(lái)修改setter和getter器的方法名溯饵。

getter=getterName

setter=setterName

舉個(gè)例子:

@property (getter=show1,setter=show2:)int age;//現(xiàn)在侵俗,它的getter和setter的方法名字就變了

注意:如果你設(shè)置了readonly屬性的話,那么你就不應(yīng)該設(shè)置setter屬性丰刊,要不然會(huì)給出一個(gè)編譯器的警告隘谣。

(2)、設(shè)置只讀或讀寫

下面兩個(gè)屬性很好理解啄巧,

readwrite:表示既有g(shù)etter寻歧,也有setter

readonly:表示只有g(shù)etter,沒有setter

這兩個(gè)屬性是互相排斥的秩仆,只能存在一個(gè)码泛。

(3)、定義setter的語(yǔ)義

下面的屬性指定setter語(yǔ)義設(shè)置訪問(wèn)器逗概。他們是互相排斥的弟晚。

strong:指定有很強(qiáng)的(擁有)關(guān)系到目標(biāo)對(duì)象。

weak:指定有弱(non-owning)關(guān)系到目標(biāo)對(duì)象逾苫。如果目的地對(duì)象銷毀,屬性值將自動(dòng)設(shè)置為nil卿城。(弱屬性不支持OS X上的v10.6和iOS 4,使用指定取而代之)铅搓。

copy:調(diào)用原始對(duì)象的copy()方法瑟押,創(chuàng)建一個(gè)原始對(duì)象的副本,用于分配給新的引用星掰。原始的對(duì)象在調(diào)用release方法多望。當(dāng)然這個(gè)屬性只用于實(shí)現(xiàn)了NSCopying協(xié)議的對(duì)象類型嫩舟。

assign:指定使用簡(jiǎn)單的賦值的setter。這個(gè)屬性是違約怀偷〖已幔  使用這個(gè)屬性對(duì)于標(biāo)量的類型(如NSInteger和CGRect等);

retain: 指定retain應(yīng)該調(diào)用對(duì)象上的椎工。原始的對(duì)象在調(diào)用release饭于。在OS X v10.6和之后,您可以使用這個(gè)關(guān)鍵字用于內(nèi)存管理方面。

(4)维蒙、訪問(wèn)屬性的線程安全

nonatomic:表示不考慮線程安全

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末掰吕,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子颅痊,更是在濱河造成了極大的恐慌殖熟,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斑响,死亡現(xiàn)場(chǎng)離奇詭異菱属,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)恋捆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門照皆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人沸停,你說(shuō)我怎么就攤上這事≌炎浚” “怎么了愤钾?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)候醒。 經(jīng)常有香客問(wèn)我能颁,道長(zhǎng),這世上最難降的妖魔是什么倒淫? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任伙菊,我火速辦了婚禮,結(jié)果婚禮上敌土,老公的妹妹穿的比我還像新娘镜硕。我一直安慰自己,他們只是感情好返干,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布兴枯。 她就那樣靜靜地躺著,像睡著了一般矩欠。 火紅的嫁衣襯著肌膚如雪财剖。 梳的紋絲不亂的頭發(fā)上悠夯,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音躺坟,去河邊找鬼沦补。 笑死,一個(gè)胖子當(dāng)著我的面吹牛咪橙,可吹牛的內(nèi)容都是我干的夕膀。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼匣摘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼店诗!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起音榜,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤庞瘸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后赠叼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體擦囊,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年嘴办,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瞬场。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡涧郊,死狀恐怖贯被,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情妆艘,我是刑警寧澤彤灶,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站批旺,受9級(jí)特大地震影響幌陕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜汽煮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一搏熄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧暇赤,春花似錦心例、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至失暴,卻和暖如春坯门,著一層夾襖步出監(jiān)牢的瞬間微饥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工古戴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留欠橘,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓现恼,卻偏偏與公主長(zhǎng)得像肃续,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叉袍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Objective-C 1. import的用法 拷貝文件內(nèi)容可以自動(dòng)防止文件的內(nèi)容被重復(fù)拷貝(#define宏定...
    馬文濤閱讀 5,338評(píng)論 3 17
  • 小時(shí)候 媽媽三十歲 知道我所有的不知道 能做我所有的不能夠 三十歲的女人如謎一樣 是一座莊嚴(yán)又溫馨的城堡 長(zhǎng)大后 ...
    休休小妮閱讀 148評(píng)論 0 3
  • JSTL apache對(duì)EL表達(dá)式的擴(kuò)展 jstl.jar包c(diǎn)ore 核心庫(kù)fmt 格式化標(biāo)簽庫(kù) Core (c標(biāo)...
    大批閱讀 226評(píng)論 0 0
  • 任何使我宣泄的東西 不過(guò)是因?yàn)檫€抱有執(zhí)著 如果早已沒有希望 你看我還會(huì)不會(huì)過(guò)問(wèn)你是誰(shuí)
    未明花香閱讀 122評(píng)論 0 0
  • 昨個(gè)兒有個(gè)小寶寶把我最愛的簪子給弄斷了始锚。當(dāng)時(shí)看到時(shí)真的好氣憤,突然一下子就覺察到當(dāng)下的那個(gè)憤怒喳逛,讓自己靜下來(lái)瞧捌,過(guò)后...
    高藝菲Sophia閱讀 198評(píng)論 0 0