ARC與MRC

1. Objective-c語言中的MRC(MannulReference Counting)

在MRC的內(nèi)存管理模式下榆综,與對變量的管理相關(guān)的方法有:retain,release和autorelease令宿。retain和release方法操作的是引用記數(shù),當(dāng)引用記數(shù)為零時(shí)卵皂,便自動(dòng)釋放內(nèi)存。并且可以用NSAutoreleasePool對象砚亭,對加入自動(dòng)釋放池(autorelease 調(diào)用)的變量進(jìn)行管理灯变,當(dāng)drain時(shí)回收內(nèi)存。

(1)retain捅膘,該方法的作用是將內(nèi)存數(shù)據(jù)的所有權(quán)附給另一指針變量添祸,引用數(shù)加1,即retainCount+= 1;

(2)release寻仗,該方法是釋放指針變量對內(nèi)存數(shù)據(jù)的所有權(quán)刃泌,引用數(shù)減1,即retainCount-= 1;

(3)autorelease,該方法是將該對象內(nèi)存的管理放到autoreleasepool中耙替。

//假設(shè)Number為預(yù)定義的類

Number* num = [[Number alloc] init];

Number* num2 = [num retain];? ? ? ? //此時(shí)引用記數(shù)+1亚侠,現(xiàn)為2

[num2 release];? ? ? ? ? ? ? ? ? ? ? //num2 釋放對內(nèi)存數(shù)據(jù)的所有權(quán) 引用記數(shù)-1,現(xiàn)為1;

[num release];? ? ? ? ? ? ? ? ? ? ? //num釋放對內(nèi)存數(shù)據(jù)的所有權(quán) 引用記數(shù)-1,現(xiàn)為0;

[num add:1 and 2];? ? ? ? ? ? ? ? ? //bug,此時(shí)內(nèi)存已釋放俗扇。

//autoreleasepool 的使用 在MRC管理模式下硝烂,我們摒棄以前的用法,NSAutoreleasePool對象的使用铜幽,新手段為@autoreleasepool

@autoreleasepool {

Number* num = [[Number alloc] init];

[num autorelease];? ? ? ? ? ? //由autoreleasepool來管理其內(nèi)存的釋放

}

對與Objective-c中屬性的標(biāo)識(shí)符可以總結(jié)為:

@property (nonatomic/atomic,retain/assign/copy,readonly/readwrite) Number* num;

(1)nonatomic/atomic滞谢,表示該屬性是否是對多線程安全的,是不是使用線程鎖除抛,默認(rèn)為atomic狮杨,

(2)retain/assign/copy,是有關(guān)對該屬性的內(nèi)存管理的到忽。

2. Objective-c語言中的ARC(AutomaticReference Counting)

在ARC中與內(nèi)存管理有關(guān)的標(biāo)識(shí)符橄教,可以分為變量標(biāo)識(shí)符和屬性標(biāo)識(shí)符,對于變量默認(rèn)為__strong喘漏,而對于屬性默認(rèn)為unsafe_unretained颤陶。也存在autoreleasepool。

對于變量的標(biāo)識(shí)符有:

(1) __strong陷遮,is the default. An object remains “alive” as long as there is a strong pointerto it.

(2) __weak滓走,specifies a reference that does not keep the referenced object alive. A weakreference is set to nil when there are no strong references to the object.

(3)__unsafe_unretained,specifies a reference that does not keep the referenced object alive and is notset to nil when there are no strong references to the object. If the object itreferences is deallocated, the pointer is left dangling.

(4)__autoreleasing,is used to denote arguments that are passed by reference (id *) and areautoreleased on return帽馋,managedby Autoreleasepool.

對于變量標(biāo)識(shí)符的用法:

__strong Number* num = [[Number alloc]init];

在ARC內(nèi)存管理模式下搅方,其屬性的標(biāo)識(shí)符存在以下幾種:

@property (nonatomic/atomic, assign/retain/strong/weak/unsafe_unretained/copy,readonly/readwrite) Number* num;//默認(rèn)為unsafe_unretained

其中assign/retain/copy與MRC下property的標(biāo)識(shí)符意義相同,strong類似與retain,assign類似于 unsafe_unretained姨涡,strong/weak/unsafe_unretained與ARC下變量標(biāo)識(shí)符意義相同涛漂,只是一個(gè)用于屬性的標(biāo)識(shí),一個(gè)用于變量的標(biāo)識(shí)(帶兩個(gè)下劃短線__)悠轩。所列出的其他的標(biāo)識(shí)符與MRC下意義相同鉴象。

(1)對于assign,你可以對標(biāo)量類型(如int)使用這個(gè)屬性。你可以想象一個(gè)float,它不是一個(gè)對象稽犁,所以它不能retain、copy来屠。

(2)對于copy俱笛,指定應(yīng)該使用對象的副本(深度復(fù)制)传趾,前一個(gè)值發(fā)送一條release消息。基本上像retain榕订,但是沒有增加引用計(jì)數(shù),是分配一塊新的內(nèi)存來放置它。特別適用于NSString,如果你不想改變現(xiàn)有的螺垢,就用這個(gè)枉圃,因?yàn)镹SMutableString,也是NSString坎穿。

舊工程配置arc方案:

1,直接在targets->build phases中修改compiler Flags,是否支持arc。添加:-fobjc-arc玲昧,就可以讓舊項(xiàng)目支持arc篮绿。如果想讓原來支持arc的不使用arc則添加-fno-objc-arc

2,因?yàn)樵赽uild phases中可以改變是否支持arc孵延,所以應(yīng)該在代碼中添加判斷是否支持arc亲配,這樣不管以后.m的arc是否改變尘应,都不用再次調(diào)整代碼吼虎。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末思灰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子拳亿,更是在濱河造成了極大的恐慌电湘,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鹅经,死亡現(xiàn)場離奇詭異寂呛,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)瘾晃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門贷痪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蹦误,你說我怎么就攤上這事劫拢∪饨颍” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵舱沧,是天一觀的道長妹沙。 經(jīng)常有香客問我,道長熟吏,這世上最難降的妖魔是什么距糖? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮牵寺,結(jié)果婚禮上悍引,老公的妹妹穿的比我還像新娘。我一直安慰自己帽氓,他們只是感情好趣斤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著杏节,像睡著了一般唬渗。 火紅的嫁衣襯著肌膚如雪奋渔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天壮啊,我揣著相機(jī)與錄音嫉鲸,去河邊找鬼。 笑死歹啼,一個(gè)胖子當(dāng)著我的面吹牛玄渗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播狸眼,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼藤树,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拓萌?” 一聲冷哼從身側(cè)響起岁钓,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎微王,沒想到半個(gè)月后屡限,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡炕倘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年钧大,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片罩旋。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡啊央,死狀恐怖眶诈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瓜饥,我是刑警寧澤册养,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站压固,受9級特大地震影響球拦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜帐我,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一坎炼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拦键,春花似錦谣光、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至媚朦,卻和暖如春氧敢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背询张。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工孙乖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人份氧。 一個(gè)月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓唯袄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蜗帜。 傳聞我的和親對象是個(gè)殘疾皇子恋拷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355

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