我一直在使用Google在Objective-C中提供的GDataXMLNode.m,我注意到他們在其實現(.m)文件中執行了@class
前向聲明。他們這樣做:爲什麼Google在實現(.m)文件中創建@class前向聲明?
@class NSArray, NSDictionary, NSError, NSString, NSURL;
這是爲什麼?這樣做是否有任何真正的優化?
我一直在使用Google在Objective-C中提供的GDataXMLNode.m,我注意到他們在其實現(.m)文件中執行了@class
前向聲明。他們這樣做:爲什麼Google在實現(.m)文件中創建@class前向聲明?
@class NSArray, NSDictionary, NSError, NSString, NSURL;
這是爲什麼?這樣做是否有任何真正的優化?
我不認爲它們在編譯中起到任何作用,因爲它們也存在於.h
文件中,所以它們只是重複的。此外,.h
文件已經導入Foundation.h
,因此這些前向聲明只是多餘的。
也許它們被用作GDataXMLNode
與其他類的依賴關係文檔的一種形式。
我很同意你的看法,但這是谷歌:我相信他們這樣做是出於某種原因,不僅僅是因爲他們可以這樣做,或者只是因爲某人錯過了重複...... –
事實是, *它是重複的:那些已經出現在'.h'文件*和*'NSString'中的聲明也出現在'Foundation.h'中。這兩個文件最終都被導入到'.m'文件中。所以問題是:複製相同的前向聲明有什麼作用?我認爲沒有。如果forward聲明只出現在'.m'文件中,我會理解你的疑問,但事實並非如此。谷歌是谷歌,但證據是證據... :-) – sergio
@nathanwhite - 你見過的Android設計?有很多事情是違背理性的。 (他們錯過了NSCharacterSet,NSMutableArray,可能還有其他人。) –
我的猜測是它是某種文檔標準。執行不力。 –