2011-02-08 13 views
7

私は親指の一般的なルールは、あなたが唯一の必要なベースクラスのインタフェース、プロトコル・インタフェースなど-のためのフォワード宣言することができますすべてのために@classをコンパイルして使用するためのクラスが何であるかをインポートする必要があることを十分承知しています。 classCObjectsの成分のみ契約によってClassCであるように、第1に、私は単に(ClassAClassBを前方宣言Objective-Cインターフェイスで絶対に必要以上に#importすることは常に不適切ですか?

#import "ClassA.h"  // Previously, @class ClassA; 
#import "ClassB.h"  // Previously, @class ClassB; 
#import "ClassC.h"  // Unnecessary to forward-declare 

@interface ClassD : NSObject 

@property (nonatomic, retain) ClassA * classAObject; 
@property (nonatomic, retain) ClassB * classBObject; 
@property (nonatomic, copy) NSArray * classCObjects; 

@end 

:しかし、私は#importがより適切な溶液であったように私が感じた以下のシナリオに遭遇しました)。これは私の最初の本能でした。

しかし、他の場所でClassDを使用しようとした後、私はすぐに私も、どこでも、私はそれを使用ClassDとともにClassAClassB、およびClassCを輸入しなければならなかったことに気づきました。これは、ClassDを使用するときに気にする必要のない別のクラスのようなものです。私の考え方は基本的に、ClassDのユーザーが実際にのみClassD.hのインポートを気にし、それが他の#import文の束なしでクラス全体を操作でき想定する必要があり、ということでした。上記のアプローチを考えると、私は基本的に、そのインターフェイスにClassDというドメイン内で作業するために必要なすべてを含んでいます。

このアプローチが理に適っていない理由は、「コンパイルに絶対必要以上のものが含まれていますか?

答えて

10

必要以上にインポートしないfollowing--あなたは、一般的にしている戦略は一方で - 、素晴らしい上品なスタイルと、一般的にを目指すために素晴らしいことですが、あまりにもトリッキーな例を悩む必要はありません。ちょうど#import必要なもの。

実際には最新のマシンでは、コンパイル時に観測できないマイクロ秒数を追加するだけです。あなたのアプリを作成するために保存する開発者の時間を使用してください。 :)

+0

1:私が言っての過程にあったが、私の実現だったものですより良い:) – Mac

+0

を言ったが、私は結果として、いくつかのより重要な設計校長に違反していなかったことを確認したかったです。私のために働く。 :) – LucasTizma

+1

'#import'は、Obj-Cが提供するストレートCよりも単一の最善の改善であるかもしれません。 ;)それを使用して、それを愛し、それを汗をかまないでください。とにかく、私はそれがどのように転がります。がんばろう。 –

1

プログラマとして、可能な限りクラスの宣言を進めるべきです。大きなプロジェクトではコンパイル時間が大幅に短縮されます。しかし、どこに宣言するかにあまりにも多くの時間を費やすことは、あなたが非常に魅力的なアプリを設計するのに役立つ方法ではありません。だから、あなたがを宣言することができるならば、それはだが、でなければならない。それは必ずしもではない。

関連する問題