GeekBand-OC中的ARC

自動引用計數(shù)(Automatic Reference Counting)是Objective-C默認的內(nèi)存管理機制震放,其針對堆上的對象小压,由編譯器自動生成操作引用計數(shù)的指令(retain或release),來管理對象的創(chuàng)建與釋放倡缠。

哪些對象受ARC管理

  • OC對象指針
  • Block指針
  • 使用attribute((NSObject))定義的typedef

哪些對象不受ARC管理

  • 值類型
  • 使用其他方式分配的堆對象,如malloc
  • 非內(nèi)存資源

ARC的操作規(guī)范或過程

  1. 新創(chuàng)建(new alloc copy)一個引用類型對象编整,引用計數(shù)為1
    NSObject obj = [NSObject alloc];
  2. 如下操作會使引用計數(shù)加1(即retain操作):
    //1.將對引用賦值給其它變量锦秒、常量、屬性散址、實例常量
    NSObject obj2 = obj;
    //2.將對象加入集合中
    NSSet set;
    [set addObject:obj];
    //3.將對象傳遞給函數(shù)參數(shù)乖阵,或者返回值
    void draw(BLNPoint *p){
    NSLog(@"[%ld, %ld]",(long)p.x, (long)p.y)
    }
  3. 對象引用計數(shù)減1——release操作:
    //1.將變量賦值為nil或其它值
    obj = nil;
    //2.屬性或?qū)嵗兞克诘膶ο蟊会尫拧⒒蛸x為其它值
    //3.參數(shù)或局部變量離開函數(shù)
    //4.將對象從集合中刪除
    [array removeObjectAtIndex:0];
  4. 引用計數(shù)變?yōu)?時预麸,內(nèi)存自動被釋放瞪浸。

自動釋放池

當引用計數(shù)變?yōu)?時,對象會觸發(fā)release事件师崎,使內(nèi)存立即釋放默终。但是如果頻繁對對象進行release,可能會造成瑣碎的內(nèi)存管理負擔犁罩。autorelease可以將release的調(diào)用延遲到自動釋放池被釋放時齐蔽。

  void poolDemo(){
       @autoreleasepool {
            for (int i = 0; i < 10; i++) {
              __unused  BLNRectangle *rect = [[BLNRectangle alloc]init];
        }
      }
   }

什么時候需要手工管理自動釋放池

  • 編寫的程序不基于UI框架,如命令行程序床估。
  • 再循環(huán)中創(chuàng)建大量臨時對象含滴,需要更早的釋放,避免臨時對象聚集導致內(nèi)存峰值過大
  • 在主線程之外創(chuàng)建新的線程丐巫,在新線程開始執(zhí)行處谈况,需要創(chuàng)建自己的Autorelease Pool。
  • 可以嵌套使用Autorelease Pool
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末递胧,一起剝皮案震驚了整個濱河市碑韵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缎脾,老刑警劉巖祝闻,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異遗菠,居然都是意外死亡联喘,警方通過查閱死者的電腦和手機华蜒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來豁遭,“玉大人叭喜,你說我怎么就攤上這事”托唬” “怎么了捂蕴?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長闪幽。 經(jīng)常有香客問我启绰,道長,這世上最難降的妖魔是什么沟使? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮渊跋,結(jié)果婚禮上腊嗡,老公的妹妹穿的比我還像新娘。我一直安慰自己拾酝,他們只是感情好燕少,可當我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蒿囤,像睡著了一般客们。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上材诽,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天底挫,我揣著相機與錄音,去河邊找鬼脸侥。 笑死建邓,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的睁枕。 我是一名探鬼主播官边,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼外遇!你這毒婦竟也來了注簿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤跳仿,失蹤者是張志新(化名)和其女友劉穎诡渴,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體塔嬉,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡玩徊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年租悄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恩袱。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡泣棋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出畔塔,到底是詐尸還是另有隱情潭辈,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布澈吨,位于F島的核電站把敢,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏谅辣。R本人自食惡果不足惜修赞,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望桑阶。 院中可真熱鬧柏副,春花似錦、人聲如沸蚣录。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽萎河。三九已至荔泳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間虐杯,已是汗流浹背玛歌。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留厦幅,地道東北人沾鳄。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像确憨,于是被迫代替她去往敵國和親译荞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,781評論 2 361

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

  • 1.1 什么是自動引用計數(shù) 概念:在 LLVM 編譯器中設(shè)置 ARC(Automaitc Reference Co...
    __silhouette閱讀 5,192評論 1 17
  • 內(nèi)存管理是程序在運行時分配內(nèi)存、使用內(nèi)存塔猾,并在程序完成時釋放內(nèi)存的過程篙骡。在Objective-C中,也被看作是在眾...
    蹲瓜閱讀 3,111評論 1 8
  • 內(nèi)存管理 簡述OC中內(nèi)存管理機制。與retain配對使用的方法是dealloc還是release糯俗,為什么尿褪?需要與a...
    丶逐漸閱讀 1,971評論 1 16
  • 37.cocoa內(nèi)存管理規(guī)則 1)當你使用new,alloc或copy方法創(chuàng)建一個對象時得湘,該對象的保留計數(shù)器值為1...
    如風家的秘密閱讀 856評論 0 4
  • 29.理解引用計數(shù) Objective-C語言使用引用計數(shù)來管理內(nèi)存杖玲,也就是說,每個對象都有個可以遞增或遞減的計數(shù)...
    Code_Ninja閱讀 1,498評論 1 3