5

VS から来た新しい MAc 開発者として、私はフレームワークが何であるかを実際に「理解」していません。プロジェクトにフレームワークを追加した場合、これは自動的にヘッダーが見つかることを意味します#include <SomeFile.h>か?

場合によっては、ヘッダー検索パスも追加する必要があるようです。それは、フレームワークが正しく機能していないということですか?

4

2 に答える 2

4

Apple Conceptual Documentationで定義されているとおり:

フレームワークは、動的共有ライブラリ、nib ファイル、画像ファイル、ローカライズされた文字列、ヘッダー ファイル、リファレンス ドキュメントなどの共有リソースを 1 つのパッケージにカプセル化する階層ディレクトリです。

つまり、1 つまたは複数のアプリケーションで利用できるリソースをまとめたものであり、それ自体はアプリケーションではありません。

Apple Conceptual Documentationによる詳細:

#include ディレクティブを使用して、コードにフレームワーク ヘッダー ファイルを含めます。Objective-C で作業している場合は、 #importディレクティブの代わりにディレクティブを使用できます#include。2 つのディレクティブの基本的な結果は同じです。ただし、#importディレクティブは、同じヘッダー ファイルが 2 回以上インクルードされないことを保証します。フレームワーク ヘッダーを含める方法は 2 つあります。

#include <Framework_name/Header_filename.h>
#import <Framework_name/Header_filename.h>

どちらの場合も、Framework_nameはフレームワークの名前で、 Header_filenameはそのフレームワークまたはそのサブフレームワークの 1 つのヘッダー ファイルの名前です。

フレームワーク ヘッダー ファイルをインクルードする場合、マスター フレームワーク ヘッダー ファイルのみをインクルードするのが伝統的です。マスター ヘッダー ファイルは、名前がフレームワークの名前と一致するヘッダー ファイルです。たとえば、Address Book フレームワークには、という名前のマスター ヘッダー ファイルがあります AddressBook.h

カスタム フレームワークを含めるには:

プロジェクトが、標準の場所のいずれにも含まれていないフレームワークにリンクしている場合、Xcode がそのヘッダー ファイルを見つける前に、そのフレームワークの場所を明示的に指定する必要があります。このようなフレームワークの場所を指定するには、フレームワークを含むディレクトリをXcode プロジェクトの「フレームワーク検索パス」オプションに追加します。Xcode は、このディレクトリのリストをコンパイラとリンカーに渡します。どちらもこのリストを使用して、フレームワーク リソースを検索します。

于 2012-05-19T13:58:10.730 に答える
3

フレームワークが適切に作成されている場合、ヘッダーと実際のリンク可能な (バイナリ) ファイルが含まれています。コンパイラ (以前は GCC、最近は LLVM-clang) はフレームワーク パスを認識し、フレームワーク ヘッダーを検索する場所を自動的に認識します。ただし、いくつかのまれなケースがあります。

  1. フレームワークを追加せずに、/usr/lib. 次に、ライブラリに別の (非標準の) インクルード パスがある場合があります。これは、たとえば glib の場合に一般的です。この場合、ヘッダー検索パスに /usr/include/glib-2.0 を追加する必要があります。
  2. 逆のケース: いくつかの「傘」フレームワーク (たとえば、Core Audio が AudioToolbox.framework などの小さなサブフレームワークに分割されている) に遭遇した場合、その特定のフレームワークにはリンク可能な動的ライブラリのみが含まれています。ヘッダー。

これが役立つことを願っています。

于 2012-05-19T13:55:29.577 に答える