Objective-C 避免物件循环引用

Objective-C 避免物件循环引用

ALT

使用物件或开发新物件时,都会引用宣告,宣告定义在.h档案中,我们称为标头档(header),Objective-C中并未规定标头档一定要哪个档案中引入,视情况会在.h或程式中.m.mm,但避免重复引用标头档,丹尼的做法是把标头档宣告在.m.mm中引用,这样的做法会使Xcode在编译时才会实现方法,写程式期间比较不会因为Xcode的预先编译让Xcode会顿顿的感觉。

范例

下面程式范例让你在标头档如果需要使用同样物件时,加上前置宣告@class 物件名称来告知编译器:

/*
    filename:DYBox.h
*/

    @class DYLine

    @interface DYBox : NSObject
    @property (nonatomic, copy) NSString *labelName;
    @property (nonatomic, copy) NSString *labelAddress;
    @property (nonatomic, copy) DYLine *dyline;

/*
    filename:DYBox.m
*/
    #import "DYBox.h"
    #import "DYLine.h"

    @implementation DYBox
    :
     程式内容
    :
    @end

DYBox.h中加入@class DYLine前置宣告,之后在DYBox.h中宣告DYLine物件不需要再引入标头档,因为DYBox.m内容已经引入标头档DYLine.h而避免循环引用的问题。

结语

请记住!并非所有清况都是这样做,如果您引用的标头档是有其他必存被编译器所知道的宣告、协定之类,那还是可以在标头档中引用标头档的,只是能避免的话就可以尽量避免。

参考资料

更新日志

日期 内容
2017/06/03 内容调整、标题修改
2014/01/09 首篇

关键字

  • 避免在标头档(.h)汇入不需要的标头档
  • @class
  • expected specifier-qualifier-list before
  • warning: receiver is a forward class and corresponding @interface may not exist
  • 循环引用 引用循环 类循环引用