Objective-Cでファイルをインポートするときに、<Header.h>
または"Header.h"
の使用を許可するかどうかは、どのように決定されるのでしょうか。これまでのところ、実装ソースを取得したプロジェクト内のファイルには引用符""
を使用し、ライブラリまたはフレームワークを参照する場合は山かっこ<>
を使用するという観察がありました。
しかし、それはどのように正確に機能しますか?括弧を使用する独自のクラスを取得するにはどうすればよいですか?今のところ、Xcodeでは、自分のヘッダーに対してこれを行うことはできません。
また、いくつかのフレームワークヘッダーを調べると、ヘッダーが<frameworkname/file.h>
で相互に参照していることがわかります。 thatはどのように機能しますか? Javaのパッケージによく似ていますが、私が知る限り、Objective-Cのパッケージのようなものはありません。
Objective-CにはこれがC/C++と共通しています。引用形式は、ファイルの「ローカル」インクルード用です(現在のファイルからの相対パスを指定する必要があります。例:#include "headers/my_header.h"
)、山括弧形式は「グローバル」インクルード用です。コンパイラに渡されるインクルードパス上のどこかにあるもの(例:#include <math.h>
)。
したがって、独自のヘッダーを使用するには< >
not " "
ヘッダーディレクトリの相対パスまたは絶対パスをコンパイラに渡す必要があります。 Xcodeでこれを行う方法については、 「Xcodeのグローバルインクルードパスを追加する方法」 を参照してください。
詳細については、 このMSDNページ を参照してください。
Cでは、<>括弧内のヘッダーファイルは「システム」ディレクトリで検索され、「」はユーザーまたはローカルディレクトリで検索されます。
システムとローカルの定義は、私が推測する少しあいまいです。インクルードパスまたはCPPFLAGSのシステムディレクトリを検索し、ローカルディレクトリまたは-Iでコンパイラに指定されたディレクトリで「header.h」ファイルが検索されます。
Objective-Cでも同様に機能すると思います。
「<>」を使用して独自のクラスをインポートするには、コンパイラのlibフォルダーにヘッダーファイル(* .h)を配置するか、libフォルダーにポンピングするSYSTEM VARIABLESを設定する必要があります。
または、Always Search User Path
をYES
に設定して、山括弧を使用できるようにします。
山括弧付き<Foundation/Foundation.h>
システムファイルをインポートします。
二重引用符を使用します"Person.h"
ローカルファイル(作成したファイル)をインポートし、コンパイラにファイルの検索場所を指示します。
""
-Quotation marks
このファイルと同じフォルダーで名前付きファイルを探します(.m
ファイルで#import行が発生します)。
<>
-Angle brackets
ビルド設定で提供されるさまざまなヘッダー検索パスの中から名前付きファイルを探します。 (これらの検索パスは自動的に設定されるため、通常は変更する必要はありません。)
一般に、山括弧を使用してCocoa APIが所有するヘッダーファイルを参照し、引用符を使用して作成したヘッダーファイルを参照します。 #importディレクティブがインポートするものに興味がある場合は、(Xcodeで)それを選択し、[ファイル]→[すばやく開く]を選択して、指定されたヘッダーファイルの内容を表示します。
続きを読む こちら
同じ問題につまずいたのは、Xcodeの検索パスには2種類あります:
User Header Search Paths
Header Search Paths
独自のインクルードフォルダーをヘッダー検索パスに追加する場合、角括弧を問題なく使用できます。