內(nèi)存管理/引用計數(shù) - 思考方式

所有內(nèi)容引用自《Objective-C 高級編程 iOS與OS X多線程和內(nèi)存管理》君丁,加入了自己的部分理解岖沛。

本節(jié)小結(jié)钠怯,點小1跳到底部[1]
第二節(jié)玻驻、alloc/retain/release/dealloc實現(xiàn)
第三節(jié)、autorelease實現(xiàn)

1摊聋、 ARC

Automatic Reference Counting鸡捐,自動引用計數(shù)。在LLVM編譯器中設(shè)置ARC為有效狀態(tài)麻裁,就不再手動添加 retainrelease箍镜,編譯器會在合適的位置自動加入。

ARC需要滿足三個條件:

  • Xcode4.2 及以上版本
  • LLVM 3.0 及以上版本
  • 選項中設(shè)置ARC有效

2煎源、內(nèi)存管理的思考方式

不要只注意在計數(shù)上色迂,理解思考方式即可:

  • 自己生成的對象,自己持有
  • 非自己生成的對象手销,自己也能持有
  • 自己持有的對象歇僧,不再需要時釋放
  • 非自己持有的對象,不能釋放

對象操作和OC方法對應(yīng):

對象操作 OC方法
生成并持有對象 alloc/new/copy/mutableCopy
持有對象 retain
釋放對象 release
廢棄對象 dealloc

注:其中Cocoa框架中Foundation框架類庫的NSObject類擔(dān)負(fù)內(nèi)存管理的職責(zé)锋拖。
alloc/retain/release/dealloc都來自NSObject

自己生成的對象诈悍,自己持有

凡是以下名稱開頭的方法,都是自己生成自己持有:

  • alloc
  • new
  • copy
  • mutableCopy

copy兽埃、mutableCopy侥钳,生成并持有對象的副本,一個是不可變對象柄错,一個是可變對象舷夺。

舉個??
以下都是自己生成并持有對象:

  • allocObj
  • newObj
  • copyObj
  • mutableCopyObj

以下是錯誤的??:

  • allocate
  • newer
  • copying
  • mutableCopyed

注:以駝峰命名的開頭才算是有效的

非自己生成的對象,自己也能持有

??

// 生成對象鄙陡,但不持有冕房,后面會講原因
id obj = [NSMutableArray  array];

// ARC 自動加上了retain,ARC模式下不要添加
[obj retain];

注:非自己生成的對象趁矾,可以通過retain方法來持有。

自己持有的對象给僵,不再需要時釋放

使用release方法釋放毫捣。
自己持有的對象详拙,有兩種情況,要么自己生成自己持有的蔓同,要么通過retain持有的饶辙。

著重說下[NSMutableArray array],為什么能生成對象斑粱,但不持有弃揽。
舉個??:

- (id)object{
    // 自己生成,自己持有
    id obj = [[NSObject alloc] init];
    // 對象存在则北,但自己不持有對象
    [obj autorelease];
     
    return obj; 
}

autorelease使對象在超出指定的生存范圍后矿微,可以自動釋放,即調(diào)用release方法尚揣。

簡單原理:autorelease先將對象注冊到autoreleasepool中涌矢,autoreleasepool超出作用域后,會把所有注冊在其中的對象都release釋放快骗。

注:凡是取得誰都不持有的對象娜庇,都是用autorelease實現(xiàn)的。如前面的[NSMutableArray array]

非自己持有的對象方篮,不能釋放

注:非自己持有的對象名秀,不能釋放,會引起崩潰藕溅。


小結(jié)

1泰偿、內(nèi)存管理的思考方式:

  • 自己生成的對象,自己持有
  • 非自己生成的對象蜈垮,自己也能持有
  • 自己持有的對象耗跛,不再需要時釋放
  • 非自己持有的對象,不能釋放

2攒发、以alloc/new/copy/mutableCopy名稱開頭方法會持有對象调塌,必須以駝峰命名。
3惠猿、生成對象羔砾,但不持有,都是autorelease實現(xiàn)的偶妖。
4姜凄、autorelease會把對象注冊到自動釋放池中,自動釋放池結(jié)束生命周期時趾访,釋放所有對象态秧。


  1. ??假裝是錨點的腳注 ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市扼鞋,隨后出現(xiàn)的幾起案子申鱼,更是在濱河造成了極大的恐慌愤诱,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捐友,死亡現(xiàn)場離奇詭異淫半,居然都是意外死亡,警方通過查閱死者的電腦和手機匣砖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門科吭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人猴鲫,你說我怎么就攤上這事对人。” “怎么了变隔?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵规伐,是天一觀的道長。 經(jīng)常有香客問我匣缘,道長猖闪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任肌厨,我火速辦了婚禮培慌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘柑爸。我一直安慰自己吵护,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布表鳍。 她就那樣靜靜地躺著馅而,像睡著了一般。 火紅的嫁衣襯著肌膚如雪譬圣。 梳的紋絲不亂的頭發(fā)上瓮恭,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天,我揣著相機與錄音厘熟,去河邊找鬼屯蹦。 笑死,一個胖子當(dāng)著我的面吹牛绳姨,可吹牛的內(nèi)容都是我干的登澜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼飘庄,長吁一口氣:“原來是場噩夢啊……” “哼脑蠕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起竭宰,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤空郊,失蹤者是張志新(化名)和其女友劉穎份招,沒想到半個月后切揭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狞甚,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年廓旬,在試婚紗的時候發(fā)現(xiàn)自己被綠了哼审。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡孕豹,死狀恐怖涩盾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情励背,我是刑警寧澤春霍,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站叶眉,受9級特大地震影響址儒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜衅疙,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一莲趣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧饱溢,春花似錦喧伞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肋杖,卻和暖如春溉仑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背兽愤。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工彼念, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浅萧。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓逐沙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親洼畅。 傳聞我的和親對象是個殘疾皇子吩案,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359