Objective-C 避免物件循環引用
使用物件或開發新物件時,都會引用宣告,宣告定義在.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
- 循環引用 引用循環 类循环引用