ホームページ  >  に質問  >  本文

ios - #import “” (嵌入头文件) 在 .h 和 .m 文件中有什么区别?

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

高洛峰高洛峰2719日前433

全員に返信(7)返信します

  • 伊谢尔伦

    伊谢尔伦2017-04-17 17:32:22

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

    返事
    0
  • 阿神

    阿神2017-04-17 17:32:22

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

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

    返事
    0
  • ringa_lee

    ringa_lee2017-04-17 17:32:22

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

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

    返事
    0
  • PHPz

    PHPz2017-04-17 17:32:22

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

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

    返事
    0
  • 天蓬老师

    天蓬老师2017-04-17 17:32:22

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

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

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

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

    返事
    0
  • PHPz

    PHPz2017-04-17 17:32:22

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

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

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

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

    を参照してください。

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 17:32:22

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

    返事
    0
  • キャンセル返事