2012-04-18 3 views
3

可能性の重複は:
Difference between Category and Class Extension?objective-cの無名カテゴリと通常カテゴリの違いは何ですか?

私はしばしばあなたがプライベートとして変数を宣言したいときは、.mファイルに無名のカテゴリになるだろうと言われています。

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

違いは何ですか?

+0

[カテゴリとクラスの拡張の違い?](http://stackoverflow.com/questions/3499704/difference-between-category-and-class-extension)、http://stackoverflow.com/questions/7136124 /、http://stackoverflow.com/questions/1052233/ –

答えて

6

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

1つの違いは、クラス拡張子の宣言がクラス '@implementationブロックで定義されていることをコンパイラが予期することです。つまり、拡張子の@implementationブロックが、それが第1の@implementationブロックと同じ変換であるときに、明示的に宣言しません。あなたの便宜のためにマージされています。したがって、コンパイラは警告を生成する可能性があります。

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

これを超えて、それはちょうど慣例です。

+3

クラス拡張はivarsを宣言することもできますが、他のカテゴリは宣言できません。 –

+0

ああクラス拡張は、型のサイズを変更することができます。それは大きなものです。わかりました。 –

+0

@BJHomerが更新されました。ありがとう。 – justin