1

[[self alloc] init] ファクトリ メソッドを記述するときの の使用法を理解するのに苦労しています。ファクトリ メソッドは、クラスのインスタンスを作成する便利なメソッドであり、allocinit、およびautoreleaseを実行することを理解しています。これがどのように形成されるかを見ることができます。たとえばNSArray、ファクトリ メソッドarrayWithArray:、またはarrayなどを使用してプロパティを宣言し、それをセットアップするために呼び出されます。allocこれがandへの完全な (明示的な) 呼び出しとどのように異なるかは明らかinitです。

これに関する私の問題は、ファクトリメソッドをより深いレベルで理解していないことです。alloc明示的に呼び出す代わりにinit、クラスファクトリメソッドを使用して基本的に次のようなものをカプセル化できるという説明をオンラインで見つけました。

+(instancetype)createWithString:(NSString *)string
{
    return [[self alloc] initWithString:string];
}

しかし、サブクラスがクラス ファクトリ メソッドを使用できるようにするには、どうすれば効果的でしょうinstancetypeか?[self alloc]

4

1 に答える 1

5
  1. instancetype「このメソッドの戻り値の型は、このメソッドが呼び出されたクラスの型です」(またはサブクラス) というキーワードです。したがって、 を呼び出す[Baseclass createWithString:]と、戻り値の型は になりBaseclass *ます。ただし、このメソッドをオーバーライドしないサブクラスを作成するとします。を呼び出す[Subclass createWithString:]と、戻り値の型はSubclass *(not Baseclass *) になります。

  2. クラスがメッセージを受信するselfと、オブジェクトを指しClassます。したがって、 を呼び出すと[Baseclass createWithString:]selfはオブジェクトを指しBaseclassます。ただし、[Subclass createWithString:] を呼び出すと、代わりにselfがポイントされるため、独自のメソッドまたはメソッドを定義する (つまり、それらをオーバーライドする) 場合は、代わりにそのバージョンが呼び出されます。SubclassSubclassallocinitWithString:

于 2015-02-24T20:06:53.987 に答える