Objective-C內(nèi)存管理教程和原理剖析(三)
@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一樣):
- @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中,如果新設(shè)定的值和原值不同的話,必須要把原值對象release一次,這樣才能保證retain count是正確的。
由于我們在class內(nèi)部retain了一次(雖然是默認(rèn)實(shí)現(xiàn)的),所以我們要在dealloc方法中release這個(gè)成員變量。
- -(void) dealloc
- {
- [objB release];
- [super dealloc];
- }
示例代碼文件鏈接:http://files.cnblogs.com/VinceYuan/objective-c-memman.zip