循环引用
开发中引用一个类的规范
1、在.h中用@class来声明类
2、在.m中用#import来包含所有类的东西
Person.h @class Card//在头文件中仅仅@class,用在头文件中声明一个类,相比较import不是全部导入 @interface Person :NSObject @property(nonatomic,retain) Card *card; @end Card.h @class Person//仅仅告诉编译器Person是个类 @interface Card :NSObject @property(nonatomic,retain) Person *person; @end Card.m import "Person.h"//真正用的时候再导入 @implementation Card -(void)dealloc { [_person release]; [super dealloc]; } @end
注意:在头文件中除了继承的类(如import<Foundation/Foundation.h>),其余不用import,因为会降低编译效率。
使用时造成循环retain,A retain了B,B又retain了A,如下
Person *p = [[Person alloc] init]; Card * c = [[Card alloc] init]; p.card = c; c.person = p; [p release]; [c release];
两端循环引用,解决方法
1、一端用retain
2、一端用assign