2

@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
4

2 に答える 2

2

(これらのファイルのどこかを実際に使用していると仮定しBNRItemます)

についても同じですが、 sのBNRItemStore.m場合はコンパイル時間と再コンパイルの頻度が増える可能性があります。これは、表示する必要のある多くのクラスが'sも表示する必要がないのが一般的だからです。#importBNRItemStore.hBNRItemStoreBNRItem@interface

そのパターンはプロジェクト内の多くのヘッダーに広がるため、1つのヘッダーを簡単に編集するには、含まれているファイルの大規模なセットを使用して、ファイルの大規模なセットを再コンパイルする必要があります。また、変更に基づいて継続的にインデックスを作成しているインデクサーにも広がります。

プロジェクトが小さい(そして今後も続く)場合を除いて、前方宣言を使用するのが最善です。

--ですべてのインスタンス変数/プロパティを宣言できるのは実際には本当に素晴らしいことです.m。これはclangへのかなり新しい追加です。抽象化とビルド時間は大幅に改善できます。

于 2012-08-15T14:16:25.280 に答える
0

はいといいえ。

コンパイル時に同じものを取得することはできません。@classコンパイラにそのクラスを表示するように指示するだけなので、クラスとして扱い(取り出してエラーが発生します) 、コンパイラにそのクラスの(ヘッダー)ファイル#importを完全にインポートするように指示します。.h

.hしたがって、特にクラス#importの(ヘッダー)ファイルが他のファイルである場合は、(あなたが提案したように)遅くなります。インターフェースの場合、そのすべての機能は必要ありません。必要なのは定義だけです。

しかし、すべての意図と目的に対して、あなたに関する限り、知覚される機能はまったく同じであるため、その点ではそうです。

于 2012-08-15T14:07:23.503 に答える