3

重複の可能性:
カテゴリとクラス拡張の違い?

変数をプライベートとして宣言したい場合、.m ファイルに名前のないカテゴリを作成するとよく言われます。

名前付きカテゴリとは対照的に、名前のないカテゴリに本質的に異なるものはありますか?

違いは何ですか?

4

1 に答える 1

6

「名前のないカテゴリ」と呼ばれるものは、「クラス拡張」と呼ばれます。

違いの 1 つは、クラス拡張の宣言がクラスの@implementationブロックで定義されていることをコンパイラが想定していることです。つまり、拡張機能の@implementationブロックがプライマリ ブロックと同じ翻訳にある場合は、そのブロックを明示的に宣言しません@implementation。便宜上、これらは統合されています。その結果、コンパイラは警告を生成する場合があります。

もう 1 つの違いは、通常のカテゴリではできない、合成される (その結果、型のサイズを変更する) プロパティを拡張機能が宣言できることです。プロパティに加えて、インスタンス変数をクラス拡張の .xml で宣言できます@interface

それを超えて、それは単なる慣習です。

于 2012-04-18T02:34:46.033 に答える