我知道 @class 应该加快编译时间,但如果我有这样的情况:
#import <Foundation/Foundation.h>
@class BNRItem;
@interface BNRItemStore : NSObject
@end
#import "BNRItemStore.h"
#import "BNRItem.h"
@implementation BNRItemStore
@end
我可以这样做并仍然获得相同的编译时间吗:
#import <Foundation/Foundation.h>
#import "BNRItem.h"
@interface BNRItemStore : NSObject
@end
#import "BNRItemStore.h"
@implementation BNRItemStore
@end
最佳答案
(假设您实际上在这些文件中的某个位置使用了 BNRItem
)
对于 BNRItemStore.m
来说是一样的,但它可能会增加 #import
BNRItemStore.h 的任何内容的编译时间和重新编译频率
- 因为许多需要查看 BNRItemStore
的类通常不需要同时查看 BNRItem
的 @interface
。
随着该模式扩展到项目中的许多 header ,对一个 header 的简单编辑可能需要重新编译一大组文件,其中包含大量包含文件。它还会传播到索引器,索引器根据变化不断建立索引。
最好使用前向声明,除非您的项目很小(并将保持)。
能够在 .m
中声明所有实例变量/属性实际上非常好——因为这是对 clang 的一个相当新的补充。抽象和构建时间可以显着缩短。
关于iphone - 这两个会生成相同的编译时间吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11970673/