如果在不考虑交叉引用的情况下,#import “” (嵌入头文件) 在 .h 和 .m 文件中会有什么区别?
求各位大神解答?
伊谢尔伦2017-04-17 17:32:22
ヘッダー ファイル内でヘッダー ファイルを参照すると、コンパイル中にインポートされたヘッダー ファイルのすべてのインターフェイス情報が完全にわかります。たとえば、B.h が A.h にインポートされた場合、将来 A.h が SubA.h にインポートされると、それが完全にわかります。 B.h は、不必要なコンパイルと低い結合度を追加します。
コンパイラーは、必要な場合にのみクラスのインターフェース情報を認識します。これにより、コンパイル時間が短縮され、結合が軽減されます。授業の合間には気温が下がります
阿神2017-04-17 17:32:22
質問者が言ったように、面接の質問であれば次のように答えてください:
.h ではなく .m でインポートするようにしてください。その理由は他の回答者によって詳しく述べられています。 .h で使用される型は、可能な限り @class で宣言してから、.m にインポートする必要があります。インポートを .h で実行する必要がある状況は 2 つだけです: 1. 継承された親クラス 2. 特定のプロトコルの実装。
ringa_lee2017-04-17 17:32:22
.h は記述です
.m は実装です
一般的に、.h で使用されるクラスは .h にインポートする必要があります
.h で使用されない場合は、 .m で使用されます。 .m (または .h) でインポートできます
詳細については、コーディング標準を参照してください
通常、便宜上、.h で使用されるものは .h で引用されます
.m で使用されるものは .m で引用されます
PHPz2017-04-17 17:32:22
どこで使用してもインポートできます
.h ファイルをインポートする必要はありません。なぜインポートするのですか?
しかし、私のアプローチは基本的に
.h で @Class を使用するだけで十分です
.m で #import を使用する
天蓬老师2017-04-17 17:32:22
上の人が正論を言っているとは思えません。
最大の違いは、.m で記述することで 相互参照 を効果的に削減できることだと思います。もっと注意してみると、Fundition フレームワークと UIKit フレームワークはすべて .m および Class 宣言内で参照を使用していることがわかります。 .h 内 この方法はアプリの実行時間には影響しませんが、プロジェクトが大きくなるほど、この影響はより顕著になります。
そのため、xcode6 のデフォルトのテンプレートは、コンパイル速度を向上させるために、以前のパブリック ヘッダー ファイル .pch ファイルを削除しました。
これがお役に立てば幸いです。
PHPz2017-04-17 17:32:22
Objective-C 言語は動的機能をサポートしているため、コンパイル時にステートメントを指定するだけで済みますが、実行時に対応する実装が見つかります。メッセージが実際に送信されない場合、実装は対応するプロセスに従います。
インポート .h ファイルはヘッダー ファイルの宣言を導入するだけであり、コンパイル中の実装は考慮しません。そのため、対応するメソッドが .m ファイルに実装されていない場合でも、エラーは報告されません。
インポート .m ファイルは通常、実装ファイルです。もちろん、メソッド セレクター -> IMP 関係テーブルも実行時に見つかります。
繰り返し参照することが多いため、相互参照を防ぐことは必須です。
メッセージの動的送信については、http://www.henishuo.com/runtime-message-forwarding/
を参照してください。伊谢尔伦2017-04-17 17:32:22
ヒント:
多くの人は、#import を使用すると相互参照を防止できることを知りません。
これは、#import と #include の違いでもあります。