Objective-C的setter和getter詳解

一.setter和getter的一般寫(xiě)法

settergetter器可以說(shuō)是一個(gè)類(lèi)最基本的東西,任何一門(mén)面向?qū)ο蟮恼Z(yǔ)言,都又這個(gè)概念偿枕,C++年局、Java等等哑子。因?yàn)?code>setter和getter是對(duì)面向?qū)ο笳Z(yǔ)言封裝的最基本的支持漱牵。
Objective-Csettergetter器桐罕,當(dāng)然也和一般的語(yǔ)言沒(méi)有什么不同宁否。只不過(guò)缩麸,添加了一些自己的特性铸磅。
比如有一個(gè)實(shí)例變量:int age;
先在.h文件中聲明settergetter

    - (void)setAge:(int)newAge;  
    - (int)age;  

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

    - (void)setAge:(int)newAge  
    {  
        age=newAge;  
    }  
    - (int)age  
    {  
        return age;  
    }  

可以看出來(lái),在Objective-Csetter器沒(méi)什么區(qū)別杭朱,不過(guò)getter器的方法名缺少了get阅仔,因?yàn)?code>get在Objective-C有別的用處,所以getter器直接寫(xiě)的就是變量名弧械。

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

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

    //比如上面的聲明是一個(gè)Person類(lèi)  
    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)寫(xiě)法

每次要為一個(gè)屬性寫(xiě)上gettersetter衔瓮,不得不手十分麻煩,所以有了更簡(jiǎn)單的寫(xiě)法抖甘,
.h文件里热鞍,直接這樣寫(xiě),表示聲明了一個(gè)實(shí)例屬性和它的gettersetter

  @property int age;  

然后在.m文件中這樣寫(xiě)衔彻,表示實(shí)現(xiàn)setteergetter

 @synthesize age;  

這樣薇宠,就可以和以前一樣調(diào)用gettersetter了。

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

可以看到澄港,getter器的方法名直接就是變量名,方法名和變量名一樣悴晰,容易讓人迷糊慢睡,所以,可以這樣優(yōu)化铡溪。
.h文件中依然這樣聲明

@property int age;  

.m文件中,這樣去寫(xiě)泪喊,

    @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)的話滑肉,那么包各,你必須自己寫(xiě)出這些屬性的實(shí)現(xiàn)。

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

默認(rèn)的gettersetter器的名稱(chēng)是和變量名關(guān)聯(lián)的问畅,一定是setVirableNamevirableName,比如上面的變量age六荒,settersetAge护姆,getterage

可以通過(guò)設(shè)置@property中的settergetter屬性來(lái)修改settergetter器的方法名掏击。
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è)置只讀或讀寫(xiě)
下面兩個(gè)屬性很好理解捅膘,
readwrite:表示既有getter柒凉,也有setter
readonly:表示只有getter,沒(méi)有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ì)象銷(xiāo)毀,屬性值將自動(dòng)設(shè)置為nil林艘。(弱屬性不支持OS X上的v10.6和iOS4 ,使用指定取而代之)混坞。
copy:調(diào)用原始對(duì)象的copy()方法狐援,創(chuàng)建一個(gè)原始對(duì)象的副本,用于分配給新的引用究孕。原始的對(duì)象在調(diào)用release方法啥酱。當(dāng)然這個(gè)屬性只用于實(shí)現(xiàn)了NSCopying協(xié)議的對(duì)象類(lèi)型。
assign:指定使用簡(jiǎn)單的賦值的setter厨诸。這個(gè)屬性是違約镶殷。  使用這個(gè)屬性對(duì)于標(biāo)量的類(lèi)型(如NSIntegerCGRect等)微酬;
retain: 指定retain應(yīng)該調(diào)用對(duì)象上的绘趋。原始的對(duì)象在調(diào)用release颤陶。在OS X v10.6和之后,您可以使用這個(gè)關(guān)鍵字用于內(nèi)存管理方面。

(4)陷遮、訪問(wèn)屬性的線程安全
nonatomic:表示不考慮線程安全

原創(chuàng)地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末滓走,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子帽馋,更是在濱河造成了極大的恐慌搅方,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茬斧,死亡現(xiàn)場(chǎng)離奇詭異腰懂,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)项秉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)绣溜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人娄蔼,你說(shuō)我怎么就攤上這事怖喻。” “怎么了岁诉?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵锚沸,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我涕癣,道長(zhǎng)哗蜈,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任坠韩,我火速辦了婚禮距潘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘只搁。我一直安慰自己音比,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布氢惋。 她就那樣靜靜地躺著洞翩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪焰望。 梳的紋絲不亂的頭發(fā)上骚亿,一...
    開(kāi)封第一講書(shū)人閱讀 52,713評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音柿估,去河邊找鬼循未。 笑死,一個(gè)胖子當(dāng)著我的面吹牛秫舌,可吹牛的內(nèi)容都是我干的的妖。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼足陨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼嫂粟!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起墨缘,我...
    開(kāi)封第一講書(shū)人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤星虹,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后镊讼,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體宽涌,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年蝶棋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了卸亮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡玩裙,死狀恐怖兼贸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吃溅,我是刑警寧澤溶诞,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站决侈,受9級(jí)特大地震影響螺垢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赖歌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一枉圃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧俏站,春花似錦讯蒲、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至犯祠,卻和暖如春旭等,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背衡载。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工搔耕, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓弃榨,卻偏偏與公主長(zhǎng)得像菩收,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鲸睛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

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

  • 我穿過(guò)碎裂的時(shí)間 遇見(jiàn)你 在你的穹頂點(diǎn)亮極光 再拼湊起衰老 與所有明亮的光陰 我穿過(guò)風(fēng)與海的交集 尋找你 在每一句...
    林慕然閱讀 175評(píng)論 1 4
  • 決定采用這種方式來(lái)紀(jì)念這段感情,也是不得已而為之 一來(lái)是為了顯示我的聰明才智拳亿,哈哈 二來(lái)晴股,將來(lái)你放在家里也不會(huì)被其...
    MUMENGYUN閱讀 224評(píng)論 0 0
  • 人世間,唯有好吃的與好姑娘不可辜負(fù)肺魁。
    前端大神121212閱讀 181評(píng)論 0 0
  • 感賞今天好開(kāi)心电湘,錢(qián)寶寶啊我愛(ài)你,買(mǎi)到了自己喜歡的東西万搔,用了一個(gè)美美的發(fā)型胡桨,好喜歡啊瞬雹! 感賞自己讓自己開(kāi)心讓自己感覺(jué)...
    童欣怡_中閱讀 123評(píng)論 0 0