Objective-C内存管理教程和原理剖析(三)

移动开发 iOS
初学Objective-C的朋友都有一个困惑,总觉得对Objective-C的内存管理机制琢磨不透,程序经常内存泄漏或莫名其妙的崩溃。我在这里总结了自己对Objective-C内存管理机制的研究成果和经验,写了这么一个由浅入深的教程。希望对大家有所帮助,也欢迎大家一起探讨。

 

@property (retain)和@synthesize的默认实现

在这里解释一下@property (retain) ClassB* objB;和@synthesize objB;背后到底发生了什么(retain property的默认实现)。property实际上是getter和setter,针对有retain参数的property,背后的实现如下(请参考附件中的memman-getter-setter.m,你会发现,结果和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中,如果新设定的值和原值不同的话,必须要把原值对象release一次,这样才能保证retain count是正确的。

由于我们在class内部retain了一次(虽然是默认实现的),所以我们要在dealloc方法中release这个成员变量。

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

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

 

责任编辑:闫佳明 来源: oschina
相关推荐

2011-07-19 15:15:09

Objective-C 内存

2011-07-21 09:42:27

Objective-C 内存 Autoreleas

2013-04-11 14:37:36

Objective-CiOS内存管理系统自动创建新的aut

2013-04-11 13:57:27

Objective-CiOS开发内存管理

2013-04-11 14:16:57

Objective-CiOS开发内存管理

2011-07-18 17:14:16

Objective-C 内存 Cocoa

2011-07-29 16:08:31

Objective-C 内存

2011-07-27 17:10:30

Objective-C 持久化

2011-05-11 15:45:50

内存管理Objective-C

2011-07-21 10:10:42

Objective-C 内存 Autoreleas

2011-07-21 09:32:07

Objective-C 内存 Autoreleas

2011-07-20 17:04:43

Objective-C 内存 内存泄露

2011-08-16 17:43:47

Objective-C内存管理Autorelease

2011-08-01 11:37:41

iPhone Objective- 内存

2011-08-18 13:28:35

Objective-C内存

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开发Objective-C@property
点赞
收藏

51CTO技术栈公众号