当两个类在各自内部互相引用,如果在它们的头文件中#import对方的头文件,则会发生无法编译的问题。 此问题可以用@class关键字解决: 在.h头文件中使用@class ClassName来替代#import “ClassName.h”, 在.m文件中才正式#import “ClassName.h”来获得类的信息。
开发过程中,为了提高编译效率,在.h头文件中,使用@class ClassName来告诉编译器存在ClassName这样一个类,然后在.m文件中#import “ClassName.h”获得类的全部信息,以便在实现中调用。 但是,子类的头文件中必须#import “SuperClass.h”,不能使用@class。
循环引用还会造成内存管理的问题,表现在两个类互相操作对方的引用计数器,导致各自计数器都不能达到0,无法释放对象内存,解决这个问题的方法是:
其中一个类的set方法用retain参数,另外一个用assign。
|