私は Objective-C/iOS プログラミングの初心者です。
プロジェクトで使用するすべてのクラス ヘッダーを含む 1 つのヘッダー ファイルを作成したいと考えています。
そして、すべてのクラス ヘッダー ファイルにヘッダーをインポートします。
この質問のように:
同じヘッダー ファイルに複数のクラスを含める
しかし、このアプローチはコンパイル時間を増加させますか?
それとも他にデメリットはありますか?
ヘッダーをインポートする良い方法を教えてください。
私は Objective-C/iOS プログラミングの初心者です。
プロジェクトで使用するすべてのクラス ヘッダーを含む 1 つのヘッダー ファイルを作成したいと考えています。
そして、すべてのクラス ヘッダー ファイルにヘッダーをインポートします。
この質問のように:
同じヘッダー ファイルに複数のクラスを含める
しかし、このアプローチはコンパイル時間を増加させますか?
それとも他にデメリットはありますか?
ヘッダーをインポートする良い方法を教えてください。
一般に、新しく生成された iOS プロジェクトにはこの機能が付属しており、プリコンパイル済みヘッダーまたはプレフィックス ヘッダーと呼ばれ、拡張子が.pch
.
そこに必要なすべてのヘッダーを投げることができ、Xcode は他のものをビルドする前にそれをプリコンパイルし、それを使用してプロジェクト内の他のコンパイル ユニット (.m
ファイルなど) をコンパイルします。
プリコンパイル済みヘッダーを使用すると、コンパイル時間が長くなる場合とそうでない場合があります。一般に、多くの共通ヘッダーおよび/または多くのソース ファイルがある限り、コンパイル時間が短縮されます。
ただし、コンパイル済みのヘッダーを大きなゴミ捨て場のように扱うことは、必ずしも良い方法ではありません。コンポーネント間の疎結合を強制したい場合に、コンパイル ユニットがあらゆる種類のものに対する暗黙の依存関係を形成する可能性があるためです。
1 つのヘッダー内のすべてのクラスの問題は、クラス ヘッダーを変更するたびに、それを含むすべてのファイルを間接的にでも再コンパイルする必要があることです。クラスを直接使用するファイルは再コンパイルする必要があります。したがって、最初のケースでは、後者よりも多くのコンパイルが行われます。これが私が最初に推奨する方法です。
ただし、コードがより安定し、クラスが変更されない場合は、プリコンパイル済みヘッダーに各ファイルの同じ情報が含まれるため、それらすべてを 1 つのヘッダーに配置するとコンパイル時間が短縮されます。コードがそれほど変更されていない場合、成熟したクラスをフレームワークに入れ、フレームワークヘッダーにこれらすべてのクラスを含めます。
そのヘッダー ファイルをプロジェクトの prefix_pch ファイルにインポートできます。その後、クラスで使用できます。
ヘッダーをグローバルにインポートする場合は、YourProject-Prefix.pch
ファイルで行う必要があります。それはこのように見えるはずです..
#import <Availability.h>
#ifndef __IPHONE_4_0
#warning "This project uses features only available in iOS SDK 4.0 and later."
#endif
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "YourGlobalHeader.h"
#endif
これで、すべてのクラスがYourGlobalHeader.h
自動的にインポートされました。
すべてのヘッダーを 1 つのファイルに入れると、ビルドのパフォーマンスが向上する場合がありますが、おそらく違いに気付かないでしょう。
編成のために、クラス ヘッダーを別のファイルに保持することをお勧めします。また、ソース ファイルに必要なヘッダーのみを含める場合は、ビルド時間が短縮されますが、適切なビルド マシンを使用している場合はそれほど顕著ではありません。