您好,登錄后才能下訂單哦!
成員變量的getter/setter方法
成員變量的編程規(guī)范:
以_開頭,并使用能夠表示其含義的單詞
遵循駝峰規(guī)則:如果是多個(gè)單詞的組合,則除第一個(gè)單詞外每個(gè)單詞首字母大寫
成員變量的權(quán)限:
基于面向?qū)ο蟮姆庋b特征,很少將成員變量直接暴漏在外,權(quán)限一般為@protected或@private
如果在類的外部想要訪問(wèn)成員變量,則應(yīng)提供方法接口。
getter方法:
作用:返回對(duì)象內(nèi)部的成員變量
命名規(guī)范:方法名與成員變量名一致。
有返回值,類型與成員變量一致,不需要接受任何參數(shù)
setter方法:
作用:提供一個(gè)方法給外界設(shè)置成員變量值,可以在方法里面對(duì)參數(shù)進(jìn)行過(guò)濾
命名規(guī)范:以set開頭,后面跟成員變量名(首字母大寫)
返回值一定是void,接受一個(gè)參數(shù)且與成員變量類型相同
形參名不要和成員變量一樣
如果一個(gè)成員變量是只讀的或者不提供直接修改的方法,則不提供setter方法即可
@property關(guān)鍵字
一般情況下,我們要為每個(gè)成員變量設(shè)置getter方法以及setter方法,隨著一個(gè)類中成員變量數(shù)量的增大,會(huì)產(chǎn)生大量重復(fù)性的代碼;
@property關(guān)鍵字減少了我們這種重復(fù)性代碼的編寫,即@property幫助我們?cè)诮涌谥锌焖俾暶鱣etter方法及setter方法。
@synthesize關(guān)鍵字
@property關(guān)鍵字
在接口中快速生成getter/setter方法的聲明
@synthesize關(guān)鍵字
在實(shí)現(xiàn)中快速生成getter/setter方法的定義
蘋果公司提倡工程師去實(shí)現(xiàn) 那些核心代碼,而垃圾代碼交給 編譯器去完成
屬性
從Xcode4.5開始,@synthesize的功能被@property包攬,且其管理的成員變量也不需要聲明
即:@property可以直接聲明一個(gè)成員變量并實(shí)現(xiàn)其getter/setter方法
使用@property聲明的成員變量,稱之為屬性。
屬性所管理的成員變量的訪問(wèn)權(quán)限是:@private
屬性的訪問(wèn)方式
成員變量訪問(wèn)方式:
只能在對(duì)象的方法中方法,如self->_age
注意:在方法中,也可以訪問(wèn)同一類型的其他對(duì)象的成員變量
getter/setter方法訪問(wèn)方式:
可以在對(duì)象的方法中或者其他方法或函數(shù)中通過(guò)getter/setter訪問(wèn)
Person *pp = [Person new]; [pp setName:@"neuedu"]; NSLog(@“name:%@”, [pp name]);
點(diǎn)語(yǔ)法訪問(wèn):
可以使用點(diǎn)語(yǔ)法簡(jiǎn)化方法的調(diào)用:
pp.name = @"neuedu"; NSLog(@"name:%@", pp.name);
點(diǎn)語(yǔ)法的引入在簡(jiǎn)化了 方法調(diào)用的同時(shí)降低了 對(duì)工程師的要求
注意與pp為指針,取 成員應(yīng)使用->,要注意 區(qū)分
@property的參數(shù)
@property可以帶一些參數(shù),來(lái)限定屬性的一些特性
@property參數(shù)有五類,每一類都一個(gè)默認(rèn)值,且只能有一個(gè)值
1)是否提供setter方法
readonly: 只生成get方法
readwrite:生成set方法及get方法(默認(rèn))
如:
@property (readonly) NSString *name;
2)內(nèi)存管理相關(guān)的
retain、strong(引用計(jì)數(shù)+1)
ARC使用strong,非ARC使用retain
assign、weak:直接賦值(引用計(jì)數(shù)不變)
非ARC使用assign
ARC中OC對(duì)象使用weak,非OC對(duì)象使用assign
copy:用于深拷貝(新的),引用計(jì)數(shù)為1
一般用于NSStirng
3) 多線程原子操作
nonatomic: setter方法時(shí)不要加上多線程鎖的代碼
atomic: setter方法時(shí)加上多線程鎖的代碼(默認(rèn))
在單線程的情況下,應(yīng)這樣定義:
@property (nonatomic,readonly) NSString *name;
4)指定setter/getter方法名
用@property聲明的屬性,會(huì)自動(dòng)生成方法,同時(shí)也可以指定一個(gè)自定義的方法
如:
@property (getter = abc, setter= setAbc:) int age;
其實(shí)并不推薦這樣去做,主要用在BOOL類型屬性上
如:
@property (getter = isRich) BOOL rich;
5)空值警告參數(shù)(Xcode7新特性)
用于編譯器在編譯過(guò)過(guò)程中,對(duì)屬性賦值語(yǔ)句產(chǎn)生必要的警告,從Xcode6.3開始引入
nullable:允許賦值為nil
nonnull:不允許賦值為nil,如果做了編譯會(huì)產(chǎn)生警告
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。