[解決済み] インポート vs #インポート - iOS 7
質問
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で自動補完されます。
関連
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] iOSまたはmacOSで、インターネット接続が有効かどうかを確認するにはどうすればよいですか?
-
[解決済み] iOSのステータスバーの文字色を変更する方法
-
[解決済み] ES6インポートで中括弧を使用するのはどのような場合ですか?
-
[解決済み] iOSのバージョンを確認する方法を教えてください。
-
[解決済み] クラス vs. #インポート
-
[解決済み] iphoneアプリのベータテストはどのように行うのですか?
-
[解決済み] iOS 7でステータスバーとナビゲーションバーがビューの境界を越えて表示される
-
[解決済み] Swift で HTTP リクエストを行うにはどうしたらいいですか?
-
[解決済み】iOSアプリの名前を変更する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Objective-Cの#importと#includeの違いは何ですか?
-
IOSラーニングノート「このクラスはxxxのキーバリューコーディングに対応していません」問題解決
-
[解決済み] UITextFieldのテキスト変更イベント
-
[解決済み] UINavigationBarの1px下の行を非表示にする方法
-
[解決済み] iPadマルチタスクのサポートには、これらの方向が必要です。
-
[解決済み] UITextFieldのテキストインセット?
-
[解決済み] 16進カラーバリューの使用方法
-
[解決済み] UITableView - トップにスクロールする
-
[解決済み] ファイルはユニバーサル(3スライス)ですが、iOSの静的ライブラリのための(n)ARMv7-sスライスエラーが含まれていない、どうにかして回避するには?
-
[解決済み] iOS 11、Apple TV 4Kなどを搭載したXcode 9でワイヤレスデバッグを行う方法とは?