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

Objective-C內(nèi)存管理教程和原理剖析(三)

移動(dòng)開發(fā) iOS
初學(xué)Objective-C的朋友都有一個(gè)困惑,總覺得對Objective-C的內(nèi)存管理機(jī)制琢磨不透,程序經(jīng)常內(nèi)存泄漏或莫名其妙的崩潰。我在這里總結(jié)了自己對Objective-C內(nèi)存管理機(jī)制的研究成果和經(jīng)驗(yàn),寫了這么一個(gè)由淺入深的教程。希望對大家有所幫助,也歡迎大家一起探討。

 

@property (retain)和@synthesize的默認(rèn)實(shí)現(xiàn)

在這里解釋一下@property (retain) ClassB* objB;和@synthesize objB;背后到底發(fā)生了什么(retain property的默認(rèn)實(shí)現(xiàn))。property實(shí)際上是getter和setter,針對有retain參數(shù)的property,背后的實(shí)現(xiàn)如下(請參考附件中的memman-getter-setter.m,你會(huì)發(fā)現(xiàn),結(jié)果和memman-property.m一樣):

  1. @interface ClassA : NSObject 
  2.          ClassB *objB; 
  3. -(ClassB *) getObjB; 
  4. -(void) setObjB:(ClassB *) value; 
  5. @end 
  6.  
  7. @implementation ClassA 
  8. -(ClassB*) getObjB 
  9.          return objB; 
  10. -(void) setObjB:(ClassB*) value 
  11.          if (objB != value) 
  12.          { 
  13.                    [objB release]; 
  14.                    objB = [value retain]; 
  15.          } 

在setObjB中,如果新設(shè)定的值和原值不同的話,必須要把原值對象release一次,這樣才能保證retain count是正確的。

由于我們在class內(nèi)部retain了一次(雖然是默認(rèn)實(shí)現(xiàn)的),所以我們要在dealloc方法中release這個(gè)成員變量。

  1. -(void) dealloc 
  2.          [objB release]; 
  3.          [super dealloc]; 

 示例代碼文件鏈接:http://files.cnblogs.com/VinceYuan/objective-c-memman.zip

 

責(zé)任編輯:閆佳明 來源: oschina
相關(guān)推薦

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 13:57:27

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

2013-04-11 14:16:57

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

2011-07-18 17:14:16

Objective-C 內(nèi)存 Cocoa

2011-07-29 16:08:31

Objective-C 內(nèi)存

2011-07-27 17:10:30

Objective-C 持久化

2011-05-11 15:45:50

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

2011-07-21 10:10:42

Objective-C 內(nèi)存 Autoreleas

2011-07-21 09:32:07

Objective-C 內(nèi)存 Autoreleas

2011-07-20 17:04:43

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

2011-08-01 11:37:41

iPhone Objective- 內(nèi)存

2011-08-16 17:43:47

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

2011-08-18 13:28:35

Objective-C內(nèi)存

2011-07-08 13:49:46

Objective-C UUID

2011-08-05 14:03:39

Objective-C 對象 模板

2011-08-22 09:48:16

WindowsObjective-C

2011-08-16 10:23:04

Objective-CNSAutoreleaXcode常用鍵

2013-05-02 10:51:17

iOS開發(fā)Objective-C@property
點(diǎn)贊
收藏

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