3

通常、私は Cocoa の良い市民として、id後で簡単にサブクラス化できるように、型を返す初期化子 (つまり、ジェネリック オブジェクトへのポインター) を作成します (ただし、99% の場合は必要ありません)。

今、私は独自のクラス クラスター (単一のパブリック クラスで制限された多数のプライベート クラス) を作成しています。id質問: ジェネリックポインターを返すようにプライベート クラスのイニシャライザーを定義する必要がありますか?

- (id)initSubclassForFooClassCluster;

または、次のようなプライベート クラス自体へのポインター:

- (SubclassForFooClassCluster *)initSubclassForFooClassCluster;
4

1 に答える 1

1

init メソッドで (id) を使用するだけでよく、より具体的な型を宣言してもあまり役に立ちません。プライベート サブクラスを本当にプライベートにしたい場合は、id を使用する必要があります。そうしないと、必要なものに応じて、その情報が実際には必要ないときに、クラスの内部の情報を外部に漏らしてしまいます。

NSString はクラス クラスタであり、その init メソッドはすべて id を返します。これは、init メソッドに渡す内容に応じて、同じメソッドが異なるオブジェクト タイプを返す可能性があるためです。

于 2011-09-08T21:45:07.383 に答える