3

私は現在、すべてのObjective-cプロジェクトでクラス拡張を使用しています。

私はそれが単に「言語」の問題だと思いますが、このリンクでアップルのドキュメントを読むことによってカテゴリと拡張機能

クラス拡張の一般的な使用法は、読み取り専用としてパブリックに宣言されているプロパティを、読み取り/書き込みとしてプライベートに再宣言することです

また、クラスが公に宣言されたAPIを持ち、次にクラスまたはクラスが存在するフレームワークによってのみ使用されるようにプライベートに宣言された追加のメソッドを持つことも一般的に一般的です。

実は、母国語で「普通」と言うときは、「他にも何かある…」という暗黙の言い方を意味します。

だから私の非常に基本的な質問は?拡張機能を使用できる他のシナリオはありますか?

4

3 に答える 3

1

次のように定義されるクラス拡張の典型的な追加の使用法:

@interface SomeClass()
@end

クラスの実装で使用されるプライベート メソッドを宣言することです。Xcode 4.4 の時点で (私が思うに)、プライベート メソッドを実装で定義する前に宣言する必要がなくなったので、クラス拡張機能を使用することはほとんどありません。

編集

おっと、申し訳ありませんが、OP の元の引用の 2 番目の段落に注意を払っていませんでした。まあ、それは私が考えることができる唯一の用途です。

于 2012-09-19T14:01:51.297 に答える
1

クラス拡張により、iVar をクラスに追加することもできます。

このようにして、パブリック ヘッダー ファイルから iVar を隠すことができます。

多くの人が、特に ARC を使用して、すべてに合成プロパティを単純に使用していることを私は知っています。
これはトピックではないので説明しませんが、プロパティは少なくとも外部から読み取ることができるため、実際には 2 つのまったく異なるものです。

したがって、クラス拡張を使用すると、プライベート iVar を非表示にして安全に保つことができます。
これにより、パブリック ヘッダーをクリーンに保つことができ、必要なときに子クラスがそれらにアクセスするのを防ぐこともできます。

編集

コメントで Pfitz が述べているように、これは、最新のランタイムを使用して実装で直接実行できるようになりました。

@implementation
{
   ... // iVars
}
于 2012-09-19T14:22:12.753 に答える
1

また、クラス拡張を使用して、プロトコルの適合性を世界に宣伝せずに宣言することもできます。

于 2012-09-19T14:26:14.537 に答える