iOS開發(fā) 屬性的幾大修飾符 混用總結(jié)

面試中刑枝,往往屬性的幾大修飾符被問到的概率非常的大,所以我就做了點試驗惧辈,總結(jié)一下

接下來先列舉一下 我在實驗過程當中學(xué)到的一些知識點
  1. 引用計數(shù)機制只使用在堆中, 所有不保存在堆中的數(shù)據(jù)的引用計數(shù)都為-1。

  2. Autorelease Pool作用:緩存池,可以避免我們經(jīng)常寫relase的一種方式凑懂。其實就是延遲release,將創(chuàng)建的對象梧宫,添加到最近的autoreleasePool中接谨,等到autoreleasePool作用域結(jié)束的時候,會將里面所有的對象的引用計數(shù)減1塘匣。

  3. 系統(tǒng)類的對象方法和類方法的區(qū)別:類方法是系統(tǒng)自己創(chuàng)建對象脓豪,然后返回的對象的指針,在指向我們自定義的變量忌卤; 對象方法是咱們自己創(chuàng)建一塊內(nèi)存區(qū)域扫夜,然后用一個指針去指向它; 所以往往驰徊,類方法的引用計數(shù)要比對象方法+1笤闯,MRC里面類方法還不用自己手動釋放;ARC下面的 所有變量都是加在自動釋放池里面的棍厂,所以不需要手動釋放;

  4. ARC下,定義屬性之后,系統(tǒng)會實現(xiàn)set方法和get方法
    參照MRC下的實現(xiàn)

    setter:
    - (void)setOneArr:(NSArray *)oneArr{
        if (_oneArr != oneArr) {
              [oneArr release];
              _oneArr = [oneArr retain];//或者copy視情況而定     屬性的引用計數(shù)增加的原因就在這里
        }
    }
    getter:
    - (NSArray *)oneArr{
        if (!_oneArr) {
              _oneArr = @[@"1",@"2",@"3"];
        }
        return [[_oneArr retain] autorelease];    //      屬性的引用計數(shù)增加的原因就在這里
    }

  1. 注意 獲取獲取對象的引用計數(shù)
     NSLog(@"retain  count = %ld\n",CFGetRetainCount((__bridge  CFTypeRef)(_strStrong)));//不要用self.
  1. 字符串的類型

I. NSCFConstantString 類型的對象都是在棧區(qū)的 引用計數(shù)一直都是 -1

     NSString *str = @"xxxxxx";
     NSString *str = [NSString stringWithString:@"xxxxxx"]; 
     NSString *str = [[NSString alloc] initWithString:@"xxxxxx"]; 
     NSString *str =  [NSString string];
     NSString *str =  [[NSString alloc]  init];
    用上面幾種方式創(chuàng)建的都是 第一種類型的  
    

II. NSTaggedPointerString 對象都是在棧區(qū)的 引用計數(shù)一直都是 -1

//不包含非ASCII字符并且不超過10個字符
NSString *str = [NSString stringWithFormat:@"%@",@"xxxxxx"];
NSString *str = [[NSString alloc] initWithFormat:@"%@",@"xxxxxx"]; 
NSString *str = [[NSString alloc] initWithUTF8String:"xxxxxx"]; 
NSString *str = [NSString stringWithUTF8String:"xxxxxx"];

III. CFString 引用計數(shù)正常

像大部分的面試題答案一樣颗味,
1. 對不可變的字符串、數(shù)組牺弹、字典浦马,都建議用copy时呀,為啥呢的? 接下來列舉一下具體的情況

如果用將可變字符串賦給不可變字符串時

NSMutableString *str = [[NSMutableString alloc] init];

 1. Strong修飾的屬性 => self.strStrong = str;
      [str appendString:@"xxxx"];
      =>  臨時變量改變了的   self.strStrong也變了    則會影響原來值的純潔性
 2. Assign修飾的屬性 => self.strAssign = str;
     [str appendString:@"xxxx"];
   =>  臨時變量改變了的晶默,self.strAssign也變了退唠,則會影響原來值的純潔性,而且一旦出了
       作用域荤胁,由于assign對內(nèi)存是弱引用瞧预,導(dǎo)致內(nèi)存會提前釋放,但是assin修飾的指針卻一直存在仅政,
       會造成野指針垢油,調(diào)用即會奔潰。
 3. Copy修飾的屬性 =>  self.strCopy = str;
    [str appendString:@"xxxx"];
    =>  臨時變量改變了的   self.strCopy不受影響  推薦使用
 4. Weak修飾的屬性 =>  self.strWeak = str;
   [str appendString:@"xxxx"];
 =>  臨時變量改變了的圆丹,self.strWeak也變了滩愁,則會影響原來值的純潔性,而且一旦出了作用域辫封,
     由于Weak對內(nèi)存是弱引用硝枉,導(dǎo)致內(nèi)存會提前釋放,但是Weak修飾的指針會把指針置為nil倦微,
     所以不會造成野指針妻味。
2. 對可變的字符串、數(shù)組欣福、字典责球,都建議用Strong,為啥呢的拓劝? 接下來列舉一下具體的情況
1.首先用了assign雏逾,會造成野指針,這和上面一樣;
2.用weak也一樣郑临,會提前釋放栖博;
3.Copy修飾的屬性,
     NSMutableString *strx = [NSMutableString stringWithFormat:@"xxx??"];
     self.mStrCopy = strx;
     [strx appendString:@"xxx"];
     //Attempt to mutate immutable object with appendString:
     [self.mStrCopy appendString:@"xxx"];
首先厢洞,因為是copy修飾的仇让,所以在set方法里面,copy完得到的是不可變字符串犀变,所以進行字符串操作的時候會崩潰妹孙。
3. 對基礎(chǔ)數(shù)據(jù)類型,都建議用Assign获枝,為啥呢的蠢正?

assign 屬性修飾的話,是直接賦值的省店,如果對對象修飾的話嚣崭,沒有強引用笨触,創(chuàng)建完的內(nèi)存空間,立馬就會釋放雹舀,而assign修飾的指針卻沒有釋放芦劣,會造成野指針。

4. 用weak说榆,用來修飾代理虚吟,然后xib里面的連線一般都是weak,為啥呢的签财?

weak一般就是用來打破循環(huán)引用串慰。
weak為啥可以打破循環(huán)引用?
循環(huán)引用發(fā)生,對象之間的強引用唱蒸,導(dǎo)致內(nèi)存無法釋放邦鲫,就會導(dǎo)致內(nèi)存泄漏;weak的話神汹,指向并不會持有該對象庆捺,不會導(dǎo)致內(nèi)存無法釋放,就不會導(dǎo)致內(nèi)存泄漏屁魏。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末滔以,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蚁堤,更是在濱河造成了極大的恐慌醉者,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件披诗,死亡現(xiàn)場離奇詭異,居然都是意外死亡立磁,警方通過查閱死者的電腦和手機呈队,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唱歧,“玉大人宪摧,你說我怎么就攤上這事÷溃” “怎么了几于?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沿后。 經(jīng)常有香客問我沿彭,道長,這世上最難降的妖魔是什么尖滚? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任喉刘,我火速辦了婚禮瞧柔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘睦裳。我一直安慰自己造锅,他們只是感情好,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布廉邑。 她就那樣靜靜地躺著哥蔚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蛛蒙。 梳的紋絲不亂的頭發(fā)上肺素,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機與錄音宇驾,去河邊找鬼倍靡。 笑死,一個胖子當著我的面吹牛课舍,可吹牛的內(nèi)容都是我干的塌西。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼筝尾,長吁一口氣:“原來是場噩夢啊……” “哼捡需!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起筹淫,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤站辉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后损姜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體饰剥,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年摧阅,在試婚紗的時候發(fā)現(xiàn)自己被綠了汰蓉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡棒卷,死狀恐怖顾孽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情比规,我是刑警寧澤若厚,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站蜒什,受9級特大地震影響测秸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一乞封、第九天 我趴在偏房一處隱蔽的房頂上張望做裙。 院中可真熱鬧,春花似錦肃晚、人聲如沸锚贱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拧廊。三九已至,卻和暖如春晋修,著一層夾襖步出監(jiān)牢的瞬間吧碾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工墓卦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留倦春,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓落剪,卻偏偏與公主長得像睁本,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子忠怖,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

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

  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
    歐辰_OSR閱讀 29,383評論 8 265
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,100評論 1 32
  • OC語言基礎(chǔ) 1.類與對象 類方法 OC的類方法只有2種:靜態(tài)方法和實例方法兩種 在OC中呢堰,只要方法聲明在@int...
    奇異果好補閱讀 4,271評論 0 11
  • 看到了破敗,越發(fā)留念繁華凡泣;看不上扭捏枉疼,卻總不會瀟灑。最難舍的還是那份濃濃的鄉(xiāng)情鞋拟。
    緣定指間liu閱讀 573評論 0 51
  • 當云煙成雨骂维, 誰也不是誰的伴侶, 故事終于走到結(jié)局严卖, 就這樣揭開了謎底席舍。 by網(wǎng)...
    冷暖自知_93de閱讀 141評論 0 0