web-dev-qa-db-ja.com

山括弧<>と引用符 ""を使用した#import

Objective-Cでファイルをインポートするときに、<Header.h>または"Header.h"の使用を許可するかどうかは、どのように決定されるのでしょうか。これまでのところ、実装ソースを取得したプロジェクト内のファイルには引用符""を使用し、ライブラリまたはフレームワークを参照する場合は山かっこ<>を使用するという観察がありました。

しかし、それはどのように正確に機能しますか?括弧を使用する独自のクラスを取得するにはどうすればよいですか?今のところ、Xcodeでは、自分のヘッダーに対してこれを行うことはできません。

また、いくつかのフレームワークヘッダーを調べると、ヘッダーが<frameworkname/file.h>で相互に参照していることがわかります。 thatはどのように機能しますか? Javaのパッケージによく似ていますが、私が知る限り、Objective-Cのパッケージのようなものはありません。

110
quano

Objective-CにはこれがC/C++と共通しています。引用形式は、ファイルの「ローカル」インクルード用です(現在のファイルからの相対パスを指定する必要があります。例:#include "headers/my_header.h")、山括弧形式は「グローバル」インクルード用です。コンパイラに渡されるインクルードパス上のどこかにあるもの(例:#include <math.h>)。

したがって、独自のヘッダーを使用するには< > not " "ヘッダーディレクトリの相対パスまたは絶対パスをコンパイラに渡す必要があります。 Xcodeでこれを行う方法については、 「Xcodeのグローバルインクルードパスを追加する方法」 を参照してください。

詳細については、 このMSDNページ を参照してください。

112
Mark Pim

Cでは、<>括弧内のヘッダーファイルは「システム」ディレクトリで検索され、「」はユーザーまたはローカルディレクトリで検索されます。

システムとローカルの定義は、私が推測する少しあいまいです。インクルードパスまたはCPPFLAGSのシステムディレクトリを検索し、ローカルディレクトリまたは-Iでコンパイラに指定されたディレクトリで「header.h」ファイルが検索されます。

Objective-Cでも同様に機能すると思います。

13
stefanB

「<>」を使用して独自のクラスをインポートするには、コンパイラのlibフォルダーにヘッダーファイル(* .h)を配置するか、libフォルダーにポンピングするSYSTEM VARIABLESを設定する必要があります。

6
Rodrigo Reis

または、Always Search User PathYESに設定して、山括弧を使用できるようにします。

2
Ida88

山括弧付き<Foundation/Foundation.h>システムファイルをインポートします。

二重引用符を使用します"Person.h"ローカルファイル(作成したファイル)をインポートし、コンパイラにファイルの検索場所を指示します。

1
soupwaylee

""-Quotation marksこのファイルと同じフォルダーで名前付きファイルを探します(.mファイルで#import行が発生します)。

<>-Angle bracketsビルド設定で提供されるさまざまなヘッダー検索パスの中から名前付きファイルを探します。 (これらの検索パスは自動的に設定されるため、通常は変更する必要はありません。)

一般に、山括弧を使用してCocoa APIが所有するヘッダーファイルを参照し、引用符を使用して作成したヘッダーファイルを参照します。 #importディレクティブがインポートするものに興味がある場合は、(Xcodeで)それを選択し、[ファイル]→[すばやく開く]を選択して、指定されたヘッダーファイルの内容を表示します。

続きを読む こちら

1
yoAlex5

同じ問題につまずいたのは、Xcodeの検索パスには2種類あります:

User Header Search Paths
Header Search Paths

独自のインクルードフォルダーをヘッダー検索パスに追加する場合、角括弧を問題なく使用できます。

0
fatihk