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

© 崔石炫 中级黑马   /  2014-10-23 23:59  /  876 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. //  Person.h
  2. #import <Foundation/Foundation.h>

  3. @class Dog , Card; //@class关键字提前声明两个类,提高性能

  4. @interface Person : NSObject

  5. @property(nonatomic , retain) Dog *dog;
  6. @property(nonatomic , retain) Card *card;

  7. @end
复制代码
  1. //  Person.m
  2. #import "Person.h"
  3. #import "Dog.h" //.m文件中正式import头文件
  4. #import "Card.h"

  5. @implementation Person

  6. - (void)dealloc
  7. {
  8.     NSLog(@"Person被回收");
  9.     [_dog release]; //retain修饰的属性要进行release操作
  10.     [_card release];
  11.     [super dealloc];
  12. }

  13. @end
复制代码
  1. //  Dog.h
  2. #import <Foundation/Foundation.h>
  3. #import "Person.h"

  4. @class Person;

  5. @interface Dog : NSObject

  6. @property(nonatomic , assign) Person *owner;

  7. @end
复制代码
  1. //  Dog.m
  2. #import "Dog.h"
  3. #import "Person.h"

  4. @implementation Dog

  5. - (void)dealloc
  6. {
  7.     NSLog(@"Dog被回收"); //assign修饰的_owner不需要进行release操作
  8.     [super dealloc];
  9. }

  10. @end
复制代码
  1. //  Card.h
  2. #import <Foundation/Foundation.h>
  3. #import "Person.h"

  4. @class Person;

  5. @interface Card : NSObject

  6. @property(nonatomic , assign) Person *owner;

  7. @end
复制代码
  1. //  Card.m
  2. #import "Card.h"
  3. #import "Person.h"

  4. @implementation Card

  5. - (void)dealloc
  6. {
  7.     NSLog(@"Card被回收"); //assign修饰的_owner不需要进行release操作
  8.     [super dealloc];
  9. }

  10. @end
复制代码
  1. //  main.m
  2. #import <Foundation/Foundation.h>
  3. #import "Dog.h"
  4. #import "Card.h"
  5. #import "Person.h"

  6. /*
  7. 类的循环引用:你中有我,我中有你
  8. * 要使用@class在.h文件中提前声明所应用的类,然后在.m中#import头文件
  9. *解决办法:一端用retain,另一端用assign
  10. */

  11. int main(int argc, const char * argv[])
  12. {
  13.     Person *p1 = [[Person alloc] init];
  14.     Person *p2 = [[Person alloc] init];
  15.    
  16.     Dog *d1 = [[Dog alloc] init];
  17.     Dog *d2 = [[Dog alloc] init];
  18.    
  19.     Card *c1 = [[Card alloc] init];
  20.     Card *c2 = [[Card alloc] init];
  21.    
  22.     p1.dog = d1;
  23.     d1.owner = p1;
  24.     p1.card = c1;
  25.     c1.owner = p1;
  26.    
  27.     p2.dog = d2;
  28.     d2.owner = p2;
  29.     p2.card = c2;
  30.     c2.owner = p2;
  31.    
  32.     //两个人交换dog 和 card
  33.     p1.dog = d2;
  34.     d2.owner = p1;
  35.     p1.card = c2;
  36.     c2.owner = p1;
  37.    
  38.     p2.dog = d1;
  39.     d1.owner = p2;
  40.     p2.card = c1;
  41.     c1.owner = p2;
  42.    
  43.     [p1 release];
  44.     [p2 release];
  45.     [d1 release];
  46.     [d2 release];
  47.     [c1 release];
  48.     [c2 release];
  49.    
  50.     return 0;
  51. }
复制代码



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马