2014-04-15 33 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