// // main.m #import <Foundation/Foundation.h> #import "Pet.h" #import "Person.h" #import "SuperMan.h" int main(int argc, const char * argv[]) { @autoreleasepool { Person *per = [[Person alloc]init]; [per test]; NSUInteger r = [per retainCount]; NSLog(@"%lu",r); [per release]; SuperMan *sm = [[SuperMan alloc]init]; Pet *pet = [[Pet alloc]init]; [sm setPet:pet]; [sm test]; [sm release]; [pet release]; } return 0; }
// // Person.h #import <Foundation/Foundation.h> #import "Pet.h" @interface Person : NSObject { Pet *_pet;//初始化 } -(void)test; @end // // Person.m #import "Person.h" @implementation Person -(instancetype)init{ if (self=[super init]) { self->_pet = [[Pet alloc]init]; } return self; } -(void)test{ if (_pet) { [_pet play]; } } -(void)dealloc{ NSLog(@"释放"); [_pet release]; [super dealloc]; } @end
// // Pet.h // 关联对象的内存管理 #import <Foundation/Foundation.h> @interface Pet : NSObject -(void)play; @end // // Pet.m // 关联对象的内存管理 #import "Pet.h" @implementation Pet -(void)play{ NSLog(@"play"); } -(void)dealloc{ NSLog(@"Pet 释放"); [super dealloc]; } @end
// // SuperMan.h #import <Foundation/Foundation.h> #import "Pet.h" @interface SuperMan : NSObject { Pet *_pet; } -(void)setPet:(Pet*)mypet; -(void)test; @end // // SuperMan.m #import "SuperMan.h" @implementation SuperMan -(void)setPet:(Pet*)mypet{ //_pet = mypet; if (_pet!=mypet) { [_pet release]; _pet = [mypet retain]; } } -(void)test{ if (_pet) { [_pet play]; } } -(void)dealloc{ NSLog(@"Super man 释放"); [_pet release]; [super dealloc]; } @end
原文:http://www.cnblogs.com/WJR12/p/5043475.html