Objective-C内存管理教程和原理剖析(三)
2014-12-16 11:56
441 查看
Objective-C内存管理教程和原理剖析(三)
2013-04-11 14:32 zakowey oschina 字号:T |T
初学Objective-C的朋友都有一个困惑,总觉得对Objective-C的内存管理机制琢磨不透,程序经常内存泄漏或莫名其妙的崩溃。我在这里总结了自己对Objective-C内存管理机制的研究成果和经验,写了这么一个由浅入深的教程。希望对大家有所帮助,也欢迎大家一起探讨。
AD:2014WOT全球软件技术峰会北京站 课程视频发布
@property (retain)和@synthesize的默认实现
在这里解释一下@property (retain) ClassB* objB;和@synthesize objB;背后到底发生了什么(retain property的默认实现)。property实际上是getter和setter,针对有retain参数的property,背后的实现如下(请参考附件中的memman-getter-setter.m,你会发现,结果和memman-property.m一样):
@interface ClassA : NSObject { ClassB *objB; } -(ClassB *) getObjB; -(void) setObjB:(ClassB *) value; @end @implementation ClassA -(ClassB*) getObjB { return objB; } -(void) setObjB:(ClassB*) value { if (objB != value) { [objB release]; objB = [value retain]; } }
在setObjB中,如果新设定的值和原值不同的话,必须要把原值对象release一次,这样才能保证retain count是正确的。
由于我们在class内部retain了一次(虽然是默认实现的),所以我们要在dealloc方法中release这个成员变量。
-(void) dealloc { [objB release]; [super dealloc]; }
相关文章推荐
- iPhone/Mac Objective-C内存管理教程和原理剖析
- iPhone/Mac Objective-C内存管理教程和原理剖析
- iPhone/Mac Objective-C内存管理教程和原理剖析(一)基本原理
- iPhone/Mac Objective-C内存管理教程和原理剖析(二)口诀与范式
- iPhone/Mac Objective-C内存管理教程和原理剖析(一)基本原理
- iPhone/Mac Objective-C内存管理教程和原理剖析(二)口诀与范式
- iPhone/Mac Objective-C内存管理教程和原理剖析
- iPhone/Mac Objective-C内存管理教程和原理剖析(一)基本原理/(二)口诀与范式
- iPhone/Mac Objective-C内存管理教程和原理剖析
- iPhone/Mac Objective-C内存管理教程和原理剖析(四)系统自动创建新的autorelease pool
- iPhone/Mac Objective-C内存管理教程和原理剖析(一)基本原理
- iPhone/Mac Objective-C内存管理教程和原理剖析(四)系统自动创建新的autorelease pool
- iPhone/Mac Objective-C内存管理教程和原理剖析
- iPhone/Mac Objective-C内存管理教程和原理剖析(三) (四)
- 转载:iPhone/Mac Objective-C内存管理教程和原理剖析
- iPhone/Mac Objective-C内存管理教程和原理剖析(三)@property (retain)和@synthesize的默认实现
- iPhone/Mac Objective-C内存管理教程和原理剖析(三)@property (retain)和@synthesize的默认实现
- iPhone/Mac Objective-C内存管理教程和原理剖析
- iPhone/Mac Objective-C内存管理教程和原理剖析(三)@property (retain)和@synthesize的默认实现
- iPhone/Mac Objective-C内存管理教程和原理剖析