OC屬性&修飾符理解

OC屬性

[toc]

屬性的作用

1. 為成員變量提供訪問的接口资盅。setter和 getter 方法

@property 與 @synthsize 搭配使用禀崖,當(dāng)你沒有實現(xiàn)屬性的setter和 getter方法時竹捉,系統(tǒng)會默認幫助生成Setter getter颅崩。

  • @synthSize var = _var;

    如果沒有生成set、get方法黎侈,則默認幫助生成訪問器方法灸芳。在iOS4.4以前需要搭配@property使用涝桅,4.4以后@property不需要顯示聲明@synthsize即可生成訪問器方法。

  • @dynamic var;

    聲明dynamic以后將由程序員自己生成set/get方法烙样,并且如果沒有實現(xiàn)不會觸發(fā)警告冯遂,如果真沒有實現(xiàn)而又調(diào)用了該屬性,則會導(dǎo)致crash

2. 屬性修飾符

  1. nonatomic/atomic

    1. nonatomic
      • 線程不安全 多個線程可以同時對其進行訪問谒获,沒有資源保護
      • 訪問速度快
    2. atomic
      • 線程安全 在多線程中只能有一個線程對進行訪問蛤肌,會默認會setter方法加鎖(MRC環(huán)境重寫Setter方法需要設(shè)置訪問鎖)
      • 訪問效率慢
  2. assign/weak

    1. assign
      • 修飾基本數(shù)據(jù)類型(非指針型變量)setter方法里不會進行任何retain操作
      • assign如果拿來修飾對象類型會有野指針(懸垂指針)的危險壁却。(MRC使用unsafe_unretained修飾對象類型).assign修飾對象的話,如果對象釋放了不會置為nil|
    2. weak
      • 修飾對象類型裸准。Arc下使用 和assign的效果一致
      • weak比assign優(yōu)化的一點是展东,當(dāng)對象釋放了以后可以將修飾的指針置為nil,可以有效避免野指針的行為
  3. copy / Strong / Retain

討論copy 需要補充一下 深拷貝|淺拷貝 的知識

// 結(jié)論
// 1.容器類型的指針 copy 只會產(chǎn)生不可變對象炒俱, mutableCopy 只會產(chǎn)生可變對象 與指針本身可變性無關(guān)
// 2.容器類型的指針 copy/mutableCopy 只是對數(shù)組內(nèi)部元素指針的復(fù)制琅锻,不會去調(diào)用元素的copy方法,所以copy后新容器內(nèi)部的元素內(nèi)容是不變的向胡。
  • copy
// 系統(tǒng)引用計數(shù)的默認實現(xiàn)
- (void)setName:(NSString *)newname {
    if (_name != newname) {
        [_name release];
        _name = [newname copy];
    }
}
由上可以看出:
1. copy 修飾符 會先對舊對象release,然后copy一份新對象惊完。因此會對引用計數(shù)進行+1
2. copy 修飾符的特點就是會對對象進行一次copy僵芹。
  • strong
// 系統(tǒng)引用計數(shù)的默認實現(xiàn)
- (void)setName:(NSString *)newname {
   if (_name != newname) {
       [_name release];
       _name = [newname retain];
   }
}
由上可以看出: **strong 修飾符 會先對舊對象release,然后賦值并對新對象reatin小槐。也會對引用計數(shù)進行+1**
  • retain
    retain 是MRC時代的產(chǎn)物,retain的實現(xiàn)和strong是一樣的拇派,因此strong 也可以用于MRC下。

特別注意:對于NSArray凿跳,NSDictionary,NSString這樣的不可變對象我們需要使用copy來修飾件豌,如果使用了strong,則對象被賦值了一個可變對象的時候控嗜,不可變對象的內(nèi)容就可以發(fā)生改變了.容易造成語義的矛盾茧彤,也極有影響代碼的運行。

  1. readonly/readwrite

    readwrite就是可讀寫疆栏,不加這個屬性修飾符默認就是如此曾掂,所有變量都是可以讀寫的,也就是都自帶setter和getter方法壁顶,而使用readonly修飾系統(tǒng)會自動生成getter方法而不生成setter方法所以是只讀的珠洗,無法賦值。

3.另外一些標示符

  1. const

    NSString const *str = @"123";
    NSString * const str1 = @"123";
    str = @"456"; // 這句話只是把456的內(nèi)存地址分配給str 
    str 本身是一個變量若专,但它指向的內(nèi)存是不可變的
    str1 本身是一個常量许蓖,*str1 是一個變量
    

    const 相比 宏定義define:

     1. const 在編譯階段參與編譯,宏則是在預(yù)編譯階段
     2. 宏不做類型檢查调衰,只是替換內(nèi)容膊爪,const 會編譯檢查類型
     3. 宏可以定義函數(shù)方法代碼塊,const不行
    
  2. static
    static 修飾的變量都是在字符常量區(qū)

    1. static 修飾全部變量
      • 限制了全局變量的作用域為當(dāng)前文件內(nèi)
    2. static 修飾局部變量
      • 讓局部變量只初始化一次
      • 局部變量在程序中只有一份內(nèi)存
      • 并不會改變局部變量的作用域窖式,僅僅是改變了局部變量的生命周期
  3. extern

    對extern來說,可以理解為擴展吧,將當(dāng)前變量的作用域從一個類擴展到另一個類蚁飒。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市萝喘,隨后出現(xiàn)的幾起案子淮逻,更是在濱河造成了極大的恐慌琼懊,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爬早,死亡現(xiàn)場離奇詭異哼丈,居然都是意外死亡,警方通過查閱死者的電腦和手機筛严,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門醉旦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人桨啃,你說我怎么就攤上這事车胡。” “怎么了照瘾?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵匈棘,是天一觀的道長。 經(jīng)常有香客問我析命,道長主卫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任鹃愤,我火速辦了婚禮簇搅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘软吐。我一直安慰自己瘩将,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布关噪。 她就那樣靜靜地躺著鸟蟹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪使兔。 梳的紋絲不亂的頭發(fā)上建钥,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天,我揣著相機與錄音虐沥,去河邊找鬼熊经。 笑死,一個胖子當(dāng)著我的面吹牛欲险,可吹牛的內(nèi)容都是我干的镐依。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼天试,長吁一口氣:“原來是場噩夢啊……” “哼槐壳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起喜每,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤务唐,失蹤者是張志新(化名)和其女友劉穎雳攘,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體枫笛,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡吨灭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了刑巧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喧兄。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖啊楚,靈堂內(nèi)的尸體忽然破棺而出吠冤,到底是詐尸還是另有隱情,我是刑警寧澤恭理,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布咨演,位于F島的核電站,受9級特大地震影響蚯斯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜饵较,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一拍嵌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧循诉,春花似錦横辆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至划纽,卻和暖如春脆侮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背勇劣。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工靖避, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人比默。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓幻捏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親命咐。 傳聞我的和親對象是個殘疾皇子篡九,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,573評論 2 359

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