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

關(guān)于iPhone內(nèi)存管理總結(jié)

移動開發(fā) iOS
本文主要介紹的是對iphone內(nèi)存管理的一個總結(jié),很詳細的講解了內(nèi)存需要注意的問題并且如何去解決的方法,來看詳細內(nèi)容。

iPhone內(nèi)存管理總結(jié)是本文要介紹的內(nèi)容,iPhone里采用Objective-C開發(fā),相對來說,只要遵循了Apple的一些編程規(guī)則,比C++內(nèi)存管理來的容易些,但是也有很多需要注意的地方,一旦出現(xiàn)內(nèi)存相關(guān)的錯誤,調(diào)試也是個很頭疼的問題。

1. 比如出現(xiàn) EXC_BAD_ACCESS 錯誤,給你的錯誤提示就這個,如何根本沒法知道哪里錯誤了,其實還是有方法知道的,

做如下設(shè)置:

  1. Project -> Edit active executable ->Argument  

添加如下四個參數(shù)

  1. NSDebugEnabled  
  2. NSZombieEnabled  
  3. MallocStackLogging   
  4. MallocStackLoggingNoCompact 

并都設(shè)置為YES。具體如下圖:

iPhone內(nèi)存管理

這個時候,如果有如下一段代碼:

  1. //重復(fù)釋放一個變量   
  2.  NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];  
  3.  NSData* data = [NSData dataWithBytes:"asklaskdxjgr" length:12];  
  4.  [data release];  
  5.  [pool release]; 

再Debug窗口會有如下的提示

  1. 2003-03-18 13:01:38.644 autoreleasebug[3939] *** *** Selector 'release'  
  2. ent to dealloced instance 0xa4e10 of class NSConcreteData. 

雖然也能大致判斷是哪種類型的變量重復(fù)釋放了,但信息還不夠多,當(dāng)項目大,源碼比較多的時候,也不太方便定位,

在console窗口運行如下命令可以得到更多信息:

  1. shell malloc_history <pid> <address>

輸入命令:

  1. shell malloc_history 3939 0xa4e10 

就會出現(xiàn)更多的信息:

  1. [dave@host193 Frameworks]$ malloc_history 3939 0xa4e10  
  2. Call [2] [arg=32]: thread_a0000dec |0x1000 | start | _start | main |  
  3. +[NSData dataWithBytes:length:] | NSAllocateObject | object_getIndexedIvars |  
  4. malloc_zone_calloc   

這個時候就知道具體哪個函數(shù)出先問題了,從這里可以看到main里NSData出現(xiàn)問題了。

2、NSArray等集合類的實用問題。

如下面的代碼   

  1. ReleaseTest* rt = [[alloc] init];  
  2. NSMutableArray *array = [[NSMutableArray alloc] init] ;  
  3. [array addObject: rt];  
  4. ReleaseTest *rt2 = [array objectAtIndex:0];  
  5.       [rt2 release];     
  6. [array release];  
  7. [rt release];  

就會導(dǎo)致重復(fù)釋放內(nèi)存問題,因為rt2,獲取的是一個對象的指針,如果已經(jīng)釋放了的話,rt在釋放的話,就重復(fù)了,為了遵循誰Init誰Release的原則,rt2就不應(yīng)該Release。

3、init 和 Release 的問題。

凡是對象通過Init的方法生成的對象,都需要自己負責(zé)Release。

凡不是通過Init的方法生成的對象,不需要負責(zé)Release.如[NSString StringWithFormat]方法生成的對象就不需要自己Release,因此自己定義函數(shù),返回一個類的時候,一定要設(shè)置為autoRelease 。這樣調(diào)用的人就不用操心是否需要釋放對象了。

4、AutoReleasePool里***不要將AutoRelease對象賦值給其它對象,否則離開這個作用域后,對象將會Release掉。

小結(jié):關(guān)于iPhone內(nèi)存管理總結(jié)的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)能對你有所幫助,如果你對iphone開發(fā)很有興趣的話,請到iphone開發(fā)頻道進行更多的學(xué)習(xí)。

責(zé)任編輯:zhaolei 來源: 博客園
相關(guān)推薦

2011-06-03 10:19:59

iphone Objective-

2011-08-17 10:16:35

iPhone應(yīng)用HTTP請求協(xié)議

2020-11-20 11:22:08

Linux

2011-07-21 15:40:24

iPhone 內(nèi)存管理 對象

2016-01-13 09:19:27

2016-03-03 10:07:39

ios內(nèi)存管理面試總結(jié)

2011-08-18 10:06:10

2012-04-26 21:56:59

iPhone

2011-08-15 10:35:43

iPhone開發(fā)Atomicnonatomic

2011-08-15 10:45:11

iPhone開發(fā)delegate

2019-09-24 08:56:00

內(nèi)存Redis使用

2010-09-13 08:58:47

自動釋放便捷方法內(nèi)存管理

2011-07-06 17:40:43

iPhone SDK

2011-08-02 17:14:41

iPhone應(yīng)用 UITableVie

2011-08-12 14:39:00

iPhoneSDK

2011-07-19 15:33:57

iPhone

2011-08-18 10:39:46

iPhone開發(fā)界面

2010-06-07 13:53:06

Linux 內(nèi)存監(jiān)控

2011-08-22 11:49:20

iPhone文件系統(tǒng)NSFileManag

2011-08-12 10:09:23

iPhone開發(fā)多線程
點贊
收藏

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