A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

Person类,Dog类循环引用,重写dealloc方法,完成内存管理

main.m
  1. #import <Foundation/Foundation.h>
  2. #import "Person.h"
  3. #import "Dog.h"

  4. int main(int argc, const char * argv[]) {
  5.     @autoreleasepool {
  6.         Person *p=[[Person alloc]init];//p 1
  7.         Dog *d=[[Dog alloc]init];//d 1
  8.         p.dog=d;//p 2
  9.         d.owner=p;//d 1
  10.         
  11.         [p cook];
  12.         [d run];
  13.         
  14.         [d release];//d 1
  15.         [p release];//d 0  p 0
  16.         
  17.     }
  18.     return 0;
  19. }
复制代码

Person.h
  1. #import <Foundation/Foundation.h>
  2. //#import "Dog.h"
  3. @class Dog;
  4. @interface Person : NSObject
  5. @property(nonatomic,retain) Dog *dog;
  6. -(void)cook;
  7. @end
复制代码

Person.m
  1. #import "Person.h"

  2. @implementation Person
  3. -(void)dealloc{
  4.     [_dog release];
  5.     NSLog(@"person----dealloc!");
  6.     [super dealloc];
  7. }
  8. -(void)cook{
  9.     NSLog(@"cooking");
  10. }
  11. @end
复制代码

Dog.h
  1. #import <Foundation/Foundation.h>
  2. //#import "Person.h"
  3. @class Person;
  4. @interface Dog : NSObject
  5. @property(nonatomic,assign) Person *owner;
  6. -(void)run;
  7. @end
复制代码

Dog.m
  1. @implementation Dog
  2. -(void)dealloc{
  3. //    [_owner release];//因为p获取d用的是retain,而d获取p用的是assign,所以不需要这句
  4.     NSLog(@"dog----dealloc");
  5.     [super dealloc];
  6. }
  7. -(void)run{
  8.     NSLog(@"running");
  9. }
  10. @end
复制代码

2 个回复

正序浏览

{:2_36:}{:2_36:}{:2_36:}
回复 使用道具 举报
赞一个!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马