Person类,Dog类循环引用,重写dealloc方法,完成内存管理
main.m
- #import <Foundation/Foundation.h>
- #import "Person.h"
- #import "Dog.h"
- int main(int argc, const char * argv[]) {
- @autoreleasepool {
- Person *p=[[Person alloc]init];//p 1
- Dog *d=[[Dog alloc]init];//d 1
- p.dog=d;//p 2
- d.owner=p;//d 1
-
- [p cook];
- [d run];
-
- [d release];//d 1
- [p release];//d 0 p 0
-
- }
- return 0;
- }
复制代码
Person.h
- #import <Foundation/Foundation.h>
- //#import "Dog.h"
- @class Dog;
- @interface Person : NSObject
- @property(nonatomic,retain) Dog *dog;
- -(void)cook;
- @end
复制代码
Person.m
- #import "Person.h"
- @implementation Person
- -(void)dealloc{
- [_dog release];
- NSLog(@"person----dealloc!");
- [super dealloc];
- }
- -(void)cook{
- NSLog(@"cooking");
- }
- @end
复制代码
Dog.h
- #import <Foundation/Foundation.h>
- //#import "Person.h"
- @class Person;
- @interface Dog : NSObject
- @property(nonatomic,assign) Person *owner;
- -(void)run;
- @end
复制代码
Dog.m
- @implementation Dog
- -(void)dealloc{
- // [_owner release];//因为p获取d用的是retain,而d获取p用的是assign,所以不需要这句
- NSLog(@"dog----dealloc");
- [super dealloc];
- }
- -(void)run{
- NSLog(@"running");
- }
- @end
复制代码 |
|