ios - #import “” (嵌入头文件) 在 .h 和 .m 文件中有什么区别?
高洛峰
高洛峰 2017-04-17 17:30:22
0
7
461

如果在不考虑交叉引用的情况下,#import “” (嵌入头文件) 在 .h 和 .m 文件中会有什么区别?
求各位大神解答?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全員に返信(7)
伊谢尔伦

ヘッダー ファイル内でヘッダー ファイルを参照すると、コンパイル中にインポートされたヘッダー ファイルのすべてのインターフェイス情報が完全にわかります。たとえば、B.h が A.h にインポートされた場合、将来 A.h が SubA.h にインポートされると、それが完全にわかります。 B.h は、不必要なコンパイルと低い結合度を追加します。
コンパイラーは、必要な場合にのみクラスのインターフェース情報を認識します。これにより、コンパイル時間が短縮され、結合が軽減されます。授業の合間には気温が下がります

いいねを押す +0
阿神

質問者が言ったように、面接の質問であれば次のように答えてください:

.h ではなく .m でインポートするようにしてください。その理由は他の回答者によって詳しく述べられています。 .h で使用される型は、可能な限り @class で宣言してから、.m にインポートする必要があります。インポートを .h で実行する必要がある状況は 2 つだけです: 1. 継承された親クラス 2. 特定のプロトコルの実装。

いいねを押す +0
左手右手慢动作

.h は記述です
.m は実装です
一般的に、.h で使用されるクラスは .h にインポートする必要があります
.h で使用されない場合は、 .m で使用されます。 .m (または .h) でインポートできます

詳細については、コーディング標準を参照してください
通常、便宜上、.h で使用されるものは .h で引用されます
.m で使用されるものは .m で引用されます

いいねを押す +0
PHPzhong

どこで使用してもインポートできます
.h ファイルをインポートする必要はありません。なぜインポートするのですか?

しかし、私のアプローチは基本的に
.h で @Class を使用するだけで十分です
.m で #import を使用する

いいねを押す +0
Peter_Zhu

上の人が正論を言っているとは思えません。

最大の違いは、.m で記述することで 相互参照 を効果的に削減できることだと思います。もっと注意してみると、Fundition フレームワークと UIKit フレームワークはすべて .m および Class 宣言内で参照を使用していることがわかります。 .h 内 この方法はアプリの実行時間には影響しませんが、プロジェクトが大きくなるほど、この影響はより顕著になります。

そのため、xcode6 のデフォルトのテンプレートは、コンパイル速度を向上させるために、以前のパブリック ヘッダー ファイル .pch ファイルを削除しました。

これがお役に立てば幸いです。

いいねを押す +0
PHPzhong

Objective-C 言語は動的機能をサポートしているため、コンパイル時にステートメントを指定するだけで済みますが、実行時に対応する実装が見つかります。メッセージが実際に送信されない場合、実装は対応するプロセスに従います。

インポート .h ファイルはヘッダー ファイルの宣言を導入するだけであり、コンパイル中の実装は考慮しません。そのため、対応するメソッドが .m ファイルに実装されていない場合でも、エラーは報告されません。
インポート .m ファイルは通常、実装ファイルです。もちろん、メソッド セレクター -> IMP 関係テーブルも実行時に見つかります。

繰り返し参照することが多いため、相互参照を防ぐことは必須です。

メッセージの動的送信については、http://www.henishuo.com/runtime-message-forwarding/

を参照してください。
いいねを押す +0
伊谢尔伦

ヒント:
多くの人は、#import を使用すると相互参照を防止できることを知りません。
これは、#import と #include の違いでもあります。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート