self與super

self訪問成員變量

  • <font color=purplepink>
    成員變量是定義在類中的變量,它可以被所在類的方法所調(diào)用,而局部變量是定義在方法中的變量,當(dāng)局部變量的名稱與成員變量名相同時,局部變量將覆蓋成員變量,導(dǎo)致無法訪問成員變量.為了解決這個問題,OC提供了一個self關(guān)鍵字,它可以訪問成員變量,解決局部變量與成員變量名稱沖突的問題.
    </font>
  • <font color=yellowred>
    當(dāng)使用self訪問成員變量時,由于self本身是一個指向當(dāng)前對象的指針,因此,它其實就是調(diào)用self所在方法的一個對象.
    </font>

self調(diào)用方法

  • <font color = blackblue>
    對象方法中的self指向的是對象,所以只能代用對象方法;而類方法中的self指向的是類,所以只能調(diào)用類方法.
    </font>
  • <font color = bluepink>
    self調(diào)用方法的時候注意避免調(diào)用方法自己,若一個方法中利用self調(diào)用方法本身,則會造成死循環(huán),影響程序正常使用.
    </font>

點語法

  • <font color = pinkgreen>
    當(dāng)使用點語法獲取值的時候,系統(tǒng)會調(diào)用相關(guān)的get方法,默認(rèn)的get方法名為點以后的字符.當(dāng)使用點語法給變量賦值時,會調(diào)用set方法,默認(rèn)的set方法名為點以后的字符首字母大寫并在前面加一個set.
    </font>
  • <font color = yellowpink>
    點語法可以實現(xiàn)set和get方法的調(diào)用.點語法的本質(zhì)是set、get方法.
    </font>
  • <font color = red>
    在使用點語法的時候不能在set姿锭、get方法中使用點語法,負(fù)責(zé)會造成循環(huán)引用.因為執(zhí)行代碼self.xx = xx時,等價于[self setXx:xx],這樣就會重復(fù)循環(huán)調(diào)用setXx方法,造成死循環(huán).同理,當(dāng)執(zhí)行代碼"return self.xx"時,也會造成循環(huán)引用,只不過程序卡在setXx方法中,不能往下一步正常運(yùn)行了.所以在set,get方法中避免使用點語法.
    </font>

屬性

以@property關(guān)鍵字聲明的屬性替代了成員變量的聲明,以及set和get方法的聲明有效減少了代碼.
聲明屬性的特性:

  • <font color = redy>
    原子性:默認(rèn)情況下,屬性是atomic的,表示具有原子性,所以由編譯器生成的set和get方法提供了健全的在多線程的環(huán)境中訪問屬性的功能,get方法的返回值或通過set方法設(shè)置的值可以完全不受其它線程執(zhí)行的影響,而進(jìn)行設(shè)置.但是如果將屬性的特性設(shè)置為nonatomic,則標(biāo)明set和get方法是非原子操作的,它不使用同步鎖,所以也就不能保證set和get方法不受其他線程的影響.
    </font>
  • <font color = yellowred>
    讀寫權(quán)限:Readwrite和Readonly這兩個特性控制編譯器是否讓屬性自動生成set方法,它們兩個是互斥的.

1.Readwrite:用于標(biāo)識一個屬性是可讀寫的,這個特性是默認(rèn)的,標(biāo)明@implementation中需要同時實現(xiàn)set和get方法;如果在實現(xiàn)中使用了@synthesize指令,那么set和get方法由編譯器自動生成.
2.Readonly:用來標(biāo)識一個屬性是只讀的,并且在@implementation中僅需要實現(xiàn)一個get方法.如果在實現(xiàn)中使用了@synthesize指令,那么編譯器只會生成get方法;另外,如果代碼中使用點語法進(jìn)行賦值,編譯器會報錯.
</font>

  • 一個屬性的訪問和存儲方法默認(rèn)是propertyName和setPropertyName.(name setName).
  • 如果某些屬性是Boolean類型,則需要在get方法上添加is作為前綴.demo:@property(nonatomic, getter = isOn) BOOL on;

set語義

  • strong:此特性用于標(biāo)明屬性定義了一種"所屬關(guān)系",為這種屬性設(shè)置新值時,設(shè)置方法會保留新值并釋放舊值,然后再將新值設(shè)置上去.
  • weak:此方法定義了一種非所屬關(guān)系,為這種屬性設(shè)置新值時,設(shè)置方法不會保留新值,也不釋放舊值,此類特性與assign相似,如果目標(biāo)對象被取消,那么屬性值會自動設(shè)為nil.
  • copy:標(biāo)明在分配對象時會進(jìn)行復(fù)制,并向原來的對象發(fā)送一個release消息,復(fù)制消息是通過調(diào)用copy方法實現(xiàn)的,這個特性只有在屬性是一個特性時有效,并且這個對象要實現(xiàn)NSCopying協(xié)議.
  • assign:標(biāo)明set方法使用簡單的內(nèi)存分配,這個特性是默認(rèn)的,一般是針對數(shù)值進(jìn)行的賦值操作.
  • retain:此特性所表達(dá)的所屬關(guān)系與strong相似,然后設(shè)置方法不會保留新值.當(dāng)屬性類型為NSString類型時,經(jīng)常用此特性來保護(hù)其封裝性,傳遞給設(shè)置方法的新值可能指向一個NSMutableString類的實例,這個類表示可以修改其值的字符串.

實現(xiàn)屬性

屬性的實現(xiàn)是通過@synthesize實現(xiàn)的.demo:@synthesize 變量名= _變量名.用來通知編譯器生成沒有在@implementation中實現(xiàn)set和get方法,如果沒有為屬性標(biāo)記為@synthesize,那么必須為這個屬性實現(xiàn)set和get方法,否則編譯器會報錯.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末针炉,一起剝皮案震驚了整個濱河市满败,隨后出現(xiàn)的幾起案子饭玲,更是在濱河造成了極大的恐慌锋边,老刑警劉巖歌馍,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件黍氮,死亡現(xiàn)場離奇詭異跛十,居然都是意外死亡彤路,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門芥映,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洲尊,“玉大人,你說我怎么就攤上這事奈偏∥豚郑” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵惊来,是天一觀的道長丽涩。 經(jīng)常有香客問我,道長裁蚁,這世上最難降的妖魔是什么矢渊? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮枉证,結(jié)果婚禮上矮男,老公的妹妹穿的比我還像新娘。我一直安慰自己刽严,他們只是感情好昂灵,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布避凝。 她就那樣靜靜地躺著,像睡著了一般眨补。 火紅的嫁衣襯著肌膚如雪管削。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天撑螺,我揣著相機(jī)與錄音含思,去河邊找鬼。 笑死甘晤,一個胖子當(dāng)著我的面吹牛含潘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播线婚,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼遏弱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了塞弊?” 一聲冷哼從身側(cè)響起漱逸,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎游沿,沒想到半個月后饰抒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡诀黍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年袋坑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片眯勾。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡枣宫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吃环,到底是詐尸還是另有隱情镶柱,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布模叙,位于F島的核電站歇拆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏范咨。R本人自食惡果不足惜故觅,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望渠啊。 院中可真熱鬧输吏,春花似錦、人聲如沸替蛉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至它浅,卻和暖如春译柏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背姐霍。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工鄙麦, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人镊折。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓胯府,卻偏偏與公主長得像,于是被迫代替她去往敵國和親恨胚。 傳聞我的和親對象是個殘疾皇子骂因,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

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

  • 一.self關(guān)鍵字 OC語言中的self,就相當(dāng)于C++、Java中的this指針 1.類方法中的self...
    GSChan閱讀 3,597評論 0 8
  • 以前malgee也使用macdown編寫文件赃泡,不過沒怎么深入了解侣签,由于最近要寫個用戶體驗文檔,格式比較多急迂,就想起來...
    malgee閱讀 2,659評論 2 3
  • 睡覺前,寶寶問:媽媽蹦肴,為什么你和爸爸就可以晚睡覺僚碎,我就要早睡呢? 媽媽:因為你要長高阴幌,我們已經(jīng)長大了勺阐,長不高了。 ...
    土豆雞蛋閱讀 233評論 3 4
  • 測試2
    RomeoCinderella閱讀 110評論 0 0
  • 我今年六十五歲矛双,減肥三十年渊抽,從135斤減到168斤。三十年來深受肥胖的困擾 心臟病议忽,高血壓懒闷,脂肪肝,糖尿病栈幸,子...
    曾西伶閱讀 276評論 0 2