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一樣):
- @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];
- }
示例代碼文件鏈接:http://files.cnblogs.com/VinceYuan/objective-c-memman.zip