1. ホーム
  2. ios

[解決済み] インポート vs #インポート - iOS 7

2022-03-21 06:12:31

質問

WWDCビデオ「Implementing Engaging UI on iOS"」で説明されているように、iOS 7の新機能やイメージエフェクトのいくつかを使って遊んでいるところです。セッションのソースコード内でブラーエフェクトを生成するためのものです。 UIImage は、UIKitをインポートするカテゴリを介して、このように拡張されました。

@import UIKit;

他のセッションの動画で何か見た気がするのですが、見つけられずにいます。どのような場合に使用するのか、背景情報を探しています。Appleのフレームワークでしか使えないのでしょうか?このコンパイラディレクティブを使用する利点は、古いコードに戻って更新する必要があるほどでしょうか?

どのように解決するのですか?

という新機能です。 モジュール または "semantic import" "と呼ばれています。詳細は WWDC 2013 セッションのビデオ 205 および 404 . これは、プリコンパイルされたヘッダのより良い実装のようなものです。 iOS 7 と Mavericks では、どのシステムフレームワークでもモジュールを使用することができます。 モジュールは、フレームワークの実行ファイルとそのヘッダをパッケージングしたもので、以下のものより安全で効率的であると言われています。 #import .

を使う大きなメリットのひとつは @import というのは プロジェクトの設定でフレームワークを追加する必要がなく、自動的に行われます。 . つまり、プラスボタンをクリックしてフレームワークを検索し(ゴールデンツールボックス)、それを "Frameworks" グループに移動するステップを省略することができるのです。これは、多くの開発者を不可解な "Linker error" メッセージから救うことになるでしょう。

を使う必要はありません。 @import キーワードを使用します。 モジュールの使用をオプトインした場合、すべての #import#include ディレクティブを使用するようにマップされます。 @import を自動生成します。つまり、自分のソースコード(あるいは他からダウンロードしたライブラリのソースコード)を変更する必要がないのです。おそらく、モジュールを使用することで、ビルドのパフォーマンスも向上します。特に、PCHをうまく使っていなかったり、プロジェクトに小さなソースファイルがたくさんあったりする場合はそうでしょう。

モジュールは、ほとんどのAppleフレームワーク(UIKit、MapKit、GameKitなど)用にあらかじめ組み込まれています。Xcode で Swift のフレームワークを作成すると自動的に作成されますし、以下のように自分で手動で ".modulemap" ファイルを作成することができます。 アップルまたはサードパーティのライブラリ .

コード補完で、利用可能なフレームワークの一覧を見ることができます。

Xcode 5では、新しいプロジェクトでモジュールがデフォルトで有効になります。 . 古いプロジェクトで有効にするには、プロジェクトのビルド設定で "Modules" を検索し、 "Enable Modules" を "YES" に設定します。フレームワークのリンクもYESにします。

Xcode 5とiOS 7またはMavericks SDKを使用する必要がありますが、古いOS(例えばiOS 4.3など)向けにリリースすることは可能です。 モジュールは、コードのビルド方法やソースコードを変更することはありません。


WWDCのスライドから。

<ブロッククオート
  • フレームワークの完全なセマンティック記述をインポートする
  • ヘッダをパースする必要がない
  • フレームワークのインターフェイスをインポートするためのより良い方法
  • バイナリ表現を読み込む
  • プリコンパイルされたヘッダよりも柔軟性がある
  • ローカルマクロ定義の影響を受けない(例えば #define readonly 0x01 )
  • デフォルトで新規プロジェクトに有効

モジュールを明示的に使用すること。

交換 #import <Cocoa/Cocoa.h>@import Cocoa;

また、この記法で1つのヘッダーだけをインポートすることもできます。

@import iAd.ADBannerView;

サブモジュールはXcodeで自動補完されます。