1

重複の可能性:
.h ファイルと .m ファイルの @interface 定義の違い

Obj C クラス ファイルには .h と .m の 2 つのファイルがあり、.h にはインターフェイス定義 (@interface) が保持され、.m にはその実装 (@implementation) が保持されます。

しかし、いくつかのクラスで、.h と .m の両方で @interface が発生しているのを見ましたか?

両方のファイルで @interface が必要なのは何ですか?そうする特定の理由はありますか?また、そうした場合の利点は何ですか?

4

4 に答える 4

2

.hファイル内の@interfaceは一般にパブリックインターフェイスです。これは、次のような継承を宣言するインターフェイスです。

   @interface theMainInterface : NSObject

コロンと、これが継承し:ているスーパーオブジェクトに注意してください。これは、.hファイルでのみ実行できると思います。次のようなカテゴリでを宣言することもできます@interfaceNSObject@interface

   @interface theMainInterface(MyNewCatergory)

つまり、これは、次@interfaceのように1つの.hファイルに複数のを含めることができることを意味します。

   @interface theMainInterface : NSObject

        // What ever you want to declare can go in here. 

   @end

   @interface theMainInterface(MyNewCategory)

        // Lets declare some more in here.

   @end

@interface.hファイルでこれらのタイプのsを宣言すると、通常、それらで宣言されているすべてのものが公開されます。

ただし@interface、.mファイルでプライベートを宣言することはできます。これは、選択されたものをプライベートに拡張する@interfaceか、選択されたものに新しいカテゴリを追加する@interfaceか、新しいプライベートを宣言する3つのことのいずれかを実行します。@interface

これを行うには、このようなものを.mファイルに追加します。

  @interface theMainInterface()
      // This is used to extend theMainInterface that we set in the .h file.
      // This will use the same @implemenation
  @end

  @implemenation theMainInterface()
      // The main implementation.
  @end

  @interface theMainInterface(SomeOtherNewCategory)
      // This adds a new category to theMainInterface we will need another @implementation for this.
  @end 

  @implementation theMainInterface(SomeOtherNewCategory)
      // This is a private category added the .m file
  @end

  @interface theSecondInterface()
      // This is a whole new @interface that we have created, this is private
  @end

  @implementation theSecondInterface()
     // The private implementation to theSecondInterface
  @end

これらはすべて同じように機能しますが、唯一の違いは、いくつかはprivate、いくつかはpublicあり、いくつかは持っているということですcategories

@interface.mファイルで継承できるかどうかはわかりません。

お役に立てれば。

于 2012-09-04T11:16:11.163 に答える
2

.mファイルの @interface マクロは、通常、可視性を制限するためのプライベート iVar およびプロパティに使用されます。もちろん、これは完全にオプションですが、間違いなく良い習慣です。

于 2012-09-04T09:54:39.153 に答える
1

.m ファイルに表示される @interface は通常、内部カテゴリの定義に使用されます。カテゴリ名の後に、次の形式の @interface ステートメントが続きます。

@interface ClassName (CategoryName)

@end

次の形式のようにカテゴリ名が空の場合、内部のプロパティとメソッドは非公開と見なされます。

@interface ClassName ()

@end

また、プロパティがプライベート カテゴリで readwrite として宣言され、ヘッダーで readonly として宣言されている場合があることにも注意してください。両方の宣言が readwrite である場合、コンパイラは文句を言います。

// .h file
@interface ClassName
@property (nonatomic, strong, readonly) id aProperty;
@end

// .m file
@interface ClassName()
@property (nonatomic, strong) id aProperty;
@end
于 2012-09-04T10:54:53.400 に答える
1

プライベート メソッドを宣言する場合は、.m ファイルで @interface 宣言を使用します。

于 2012-09-04T10:07:04.070 に答える