自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Objective C內(nèi)存管理之實(shí)踐準(zhǔn)則

開(kāi)發(fā) 后端
這是一系列關(guān)于Objective C內(nèi)存管理的文章,主要是面向iPhone開(kāi)發(fā)人員,希望對(duì)大家做好蘋果手機(jī)的移動(dòng)開(kāi)發(fā)有所幫助。

這個(gè)系列打算寫一些我對(duì)iPhone開(kāi)發(fā)內(nèi)存管理的理解。是建立在讀者對(duì)Objective C的內(nèi)存管理已經(jīng)有一定理解的基礎(chǔ)上,內(nèi)容將包括實(shí)踐準(zhǔn)則,autorelease原理剖析,內(nèi)存泄露的調(diào)試等。如果您對(duì)Objective C內(nèi)存管理不太了解,建議先讀一下Vince Yuan的這個(gè)教程。

[[13089]]

在進(jìn)行iPhone開(kāi)發(fā)時(shí), 內(nèi)存管理是個(gè)相對(duì)比較難以理解的東西。Objective-C 使用了一種介于C#和C++之間的內(nèi)存管理機(jī)制。C#是基于Mark-sweep的GC,C++基本上是程序員自己負(fù)責(zé)分配和釋放。Ojbective-C,是程序員來(lái)負(fù)責(zé)Mark(通過(guò)Release, retain, alloc)計(jì)數(shù), 系統(tǒng)來(lái)進(jìn)行分配和釋放。下面是一些準(zhǔn)則,可以避免內(nèi)存泄露和使用已釋放的內(nèi)存造成程序crash。

1)你必須為你自己創(chuàng)建的Object負(fù)責(zé)。包括alloc, newObject,mutableCopy 等,或者是你調(diào)用過(guò)retain的object。對(duì)于這些Object, 你必須調(diào)用release 或autorelease

2)對(duì)于其它函數(shù)返回的Object,你不能release它,原則上應(yīng)該由被調(diào)用的函數(shù)來(lái)負(fù)責(zé)。e.g. NSString str = [NSString stringWithFormat:].  你自己寫的函數(shù)也最好遵循這個(gè)準(zhǔn)則,誰(shuí)申請(qǐng),誰(shuí)釋放,而不要讓調(diào)用者來(lái)釋放。

3)如果你要在某個(gè)對(duì)象的property里存儲(chǔ)另外一個(gè)對(duì)象,你必須retain或者copy它,避免它被別人release。

@property(retain)。。 這里的retain關(guān)鍵字會(huì)自動(dòng)做這個(gè)事情。如果你自己聲明set方法就要手動(dòng)做這個(gè)事情。

4)autorelease 意味著該object會(huì)由系統(tǒng)在某個(gè)時(shí)機(jī)release它。

5)確保你返回的object是有效的。在如下例子中, 因?yàn)閔eisenObject 被從array中remove掉,會(huì)有一個(gè)release message到heisenObject,如果沒(méi)有其它人reference它, heisenObject會(huì)被dealloc 掉。

  1. heisenObject = [array objectAtIndex:n];  
  2. [array removeObjectAtIndex:n];  
  3. // heisenObject could now be invalid. 

6) weak reference.   如下圖, Document 類中Page property 指向Page類的對(duì)象, page類中Parent property指向Document, 這樣如果互相之間的retain count都是1的話,那么這兩個(gè)object永遠(yuǎn)不會(huì)被Dealloc。 解決辦法是把page.parent變?yōu)閣eak reference,也就是說(shuō), page.parent并不retain Document。  UITableView.datasource, notification observers, delegates, outline view items 等都是week reference。

     

原文標(biāo)題:Objective C內(nèi)存管理進(jìn)階(一):實(shí)踐準(zhǔn)則

鏈接:http://www.cnblogs.com/MobileDevelop/archive/2010/07/19/1779755.html

【編輯推薦】

  1. 效仿iPhone 蘋果推出全新Mac軟件開(kāi)發(fā)服務(wù)
  2. Android叫陣iPhone 2010年軟件應(yīng)用數(shù)超15萬(wàn)
  3. iPhone應(yīng)用程序數(shù)量預(yù)計(jì)2010年將達(dá)到30萬(wàn)個(gè)
  4. 蘋果為擺脫谷歌招iPhone地圖軟件開(kāi)發(fā)者
  5. 月入40萬(wàn) iPhone中文應(yīng)用程序開(kāi)發(fā)者訪談
責(zé)任編輯:楊鵬飛 來(lái)源: 博客園
相關(guān)推薦

2011-07-21 10:10:42

Objective-C 內(nèi)存 Autoreleas

2011-05-11 15:45:50

內(nèi)存管理Objective-C

2011-07-20 17:04:43

Objective-C 內(nèi)存 內(nèi)存泄露

2011-07-21 09:32:07

Objective-C 內(nèi)存 Autoreleas

2011-07-18 17:14:16

Objective-C 內(nèi)存 Cocoa

2010-07-20 08:50:00

autoreleaseObjective C

2011-08-01 11:37:41

iPhone Objective- 內(nèi)存

2011-08-16 17:43:47

Objective-C內(nèi)存管理Autorelease

2011-07-29 16:08:31

Objective-C 內(nèi)存

2011-08-18 13:28:35

Objective-C內(nèi)存

2011-07-19 15:15:09

Objective-C 內(nèi)存

2011-07-21 09:42:27

Objective-C 內(nèi)存 Autoreleas

2013-04-11 14:37:36

Objective-CiOS內(nèi)存管理系統(tǒng)自動(dòng)創(chuàng)建新的aut

2013-04-11 14:32:00

Objective-CiOS開(kāi)發(fā)內(nèi)存管理@synthesize

2011-07-28 18:11:18

Objective-C Cocoa 編程

2013-04-11 14:16:57

Objective-CiOS開(kāi)發(fā)內(nèi)存管理

2015-07-08 10:51:27

Objective-CRuntime

2011-07-22 15:42:39

Objective-C UIView 內(nèi)存

2013-04-11 13:57:27

Objective-CiOS開(kāi)發(fā)內(nèi)存管理

2009-12-07 14:53:07

RHEL網(wǎng)絡(luò)安裝
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)