Phone/Mac Objective-C內存管理教程和原理剖析(三)@property (retain)和@synthesize的默認實現

 @property (retain)@synthesize的默認實現

在這裏解釋一下@property (retain) ClassB* objB;@synthesize objB;背後到底發生了什麼(retain property的默認實現)property實際上是gettersetter,針對有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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章