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


120

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

しかし、それはどのように正確に機能しますか?ブラケットを使用するために自分のクラスを取得するにはどうすればよいですか?現在のところ、Xcodeでは自分のヘッダーに対してそれを行うことができません。

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

回答:


122

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

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

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


1
AFNetworkingを#import <AFNetworking / AFHTTPRequestOperationManager.h>として参照するGitHubプロジェクトで問題が発生したため、ヘッダー検索パスとして$(SRCROOT)/ lib / AFNetworkingを指定する必要がありました。このフォルダーの下に、AFNetworkingという名前の別のフォルダーがあります。これは、山かっこを使用したインポートがそのパスでそれを見つける方法です。通常、#import "AFHTTPRequestOperationManager.h"は機能しますが、このプロジェクトでは、それを異なる方法で参照するだけです。
ブレナン、

理由はC / C ++と同じようです。山括弧(<>記号で示される)は現在のローカルディレクトリ以外のファイルを検索することを示し、引用符( ""記号で示される)は現在のローカルディレクトリでファイルを検索することを示します。
Jayprakash Dubey

回答の最後のリンクが古くなっています。
パン

14

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

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

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


6

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


2

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


1

山かっこを使用して、たとえば<Foundation/Foundation.h>システムファイルをインポートします。

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


1

<Name.h>- 事前に指定さAngle bracketsれた特別なシステムのディレクトリを検索するようにプリプロセッサに指示します。たとえば、<UIKit/UIKit.h>フレームワークなどのシステムヘッダーをインポートしたり、フレームワークを追加したりします。

"Name.h"- 現在のディレクトリQuotation marksを検索するようにプリプロセッサに指示します。ヘッダーが見つからなかった場合、プリプロセッサはを使用しようとします。通常、プロジェクトのファイルで使用する必要があります<Name.h>


0

同じ問題に遭遇しただけで、Xcodeには2種類の検索パスがあります。

User Header Search Paths
Header Search Paths

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


-4

ヘッダーファイルとは ヘッダーファイルには、プリプロセッサの#includeステートメントを使用して任意のCプログラムに組み込むことができる関数と変数の定義が含まれています。各コンパイラには標準ヘッダーファイルが用意されており、さまざまな領域、文字列処理、数学、データ変換、印刷、変数の読み取りをカバーしています。ex-includeには、scanf()などの入力に関する情報が含まれ、printf()関数などの出力がコンパイラに出力されます。

含む

1)#INCLUDE:-メイン関数の処理の前に処理するプリプロセッサです。プリプロセッサの主な作業は、プログラムの環境を初期化することです。つまり、ヘッダーファイルを含むプログラムです。2).h:-(ヘッダーファイル)ヘッダーファイルは、C関数の宣言とマクロ定義を含み、複数のソースファイル間で共有される拡張子.hを持つファイルです。Q)ヘッダーファイルには、プログラマーが書き込むファイルとコンパイラーに付属するファイルの2種類があります。A)山かっこで角かっこ形式は「グローバル」インクルード用です。コンパイラに渡されるインクルードパスのどこかにあるもの(例:#include)これは、すべてコンパイラで定義できるライブラリ関数の使用に使用されます。Cでは、<>ブラケット内のヘッダーファイルが「システム」で検索されるという慣例があります。ディレクトリB)引用符:-「header.h」の引用形式は、ファイルの「ローカル」インクルード用です(現在のファイルからの相対パスを指定する必要があります。例:#include "headers / my_header.h")Cの規則「」のヘッダーファイルがユーザーまたはローカルディレクトリで検索されるということです。その中に、あるファイルが別のファイルに含まれるようにします。(FILE INCLUSION)これは2つのケースで使用できます。ケース1:非常に大きなプログラムがある場合、コードはいくつかの異なるファイルに分割するのが最適で、それぞれに関連する関数のセットが含まれています。ケース2:作成するすべてのプログラムで必要な関数とマイクロ定義がいくつかあります。例 )Cでは、 ""内のヘッダーファイルはユーザーまたはローカルディレクトリで検索されます。その中に、あるファイルが別のファイルに含まれるようにします。(FILE INCLUSION)これは2つのケースで使用できます。ケース1:非常に大きなプログラムがある場合、コードはいくつかの異なるファイルに分割するのが最適で、それぞれに関連する関数のセットが含まれています。ケース2:作成するすべてのプログラムで必要な関数とマイクロ定義がいくつかあります。例 )Cでは、 ""内のヘッダーファイルはユーザーまたはローカルディレクトリで検索されます。その中に、あるファイルが別のファイルに含まれるようにします。(FILE INCLUSION)これは2つのケースで使用できます。ケース1:非常に大きなプログラムがある場合、コードはいくつかの異なるファイルに分割するのが最適で、それぞれに関連する関数のセットが含まれています。ケース2:作成するすべてのプログラムで必要な関数とマイクロ定義がいくつかあります。例

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.