2014-04-15 123 views
2

假設我有一個類,如下聲明:iOS版 - 編譯依賴

// ClassB.h 
#import "ClassA" 

@class ClassC; 
@interface ClassB : ClassA 
@property (nonatomic, strong) ClassC *obj; 
@end 

實現文件:

// ClassB.m 
#import "ClassC.h" 
#import "ClassD.h" 
#import "ClassB.h" 
... 

父頭文件:

// ClassA.h 
#import "ClassE.h" 
@interface ClassA : NSObject 
@end 

然後修改它文件會導致ClassB重新編譯? (ClassA.h?ClassA.m?ClassC.h?ClassC.m?ClassD.h?ClassD.m?ClassE.h?ClassE.m?)

+0

你確定在ClassB.m中沒有「#import」ClassB.h嗎? – Avt

回答

1

更改任何列出的頭文件都會導致ClassB重新編譯。

我假設你的ClassB.m文件導入ClassB.h。用那個和C,D頭導入; B頭中的A導入;以及A標頭導入E標頭的事實。

將導致ClassB重新編譯的唯一.m文件是ClassB.m。

只需按照可從ClassB.m訪問的文件鏈即可。請記住,導入會從其他文件吸收代碼。

+0

如果在ClassA.h中,我使用@class ClassE而不是導入。#import「ClassE.h」被放置在ClassA.m中,而不是在ClassB.m中修改ClassE.h是否會導致ClassB重新編譯? –

+0

在這種情況下,對ClassE.h的修改不會導致重新編譯ClassB – Neil

+0

「@class 「指令告訴編譯器,對於你正在編譯的當前代碼,」不要擔心你對這個類一無所知,我保證這個類將在運行時存在。「你甚至可以把」@class「在任何頭文件中都有ClassZ,並且對它有一個屬性,但是絕對不要用字母Z創建一個文件,編譯器會很好。 – Neil