我々は、すべてのクラスのインスタンスをインスタンス化するため、次のパターンに精通している:のObjective-Cクラスのメソッドのローカル変数「自己」
+ (instancetype)createInstance {
return [[self alloc] init];
}
この場合の「自己」を指し、これは動作しますクラスの青写真から構築されたオブジェクトではなく、クラスになります。
我々はまた、この宣言を知っているが、最も一般的なサイクルを維持回避に使用される:
typeof(self) someStrongSelf = self;
これはあるがself
の型が動的にすることができますし、どんなにクラスを必要とどこそのコードをコピーし、貼り付けることができます。クラスメソッドからインスタンス化する際に上記の二つのパターンを組み合わせることで
私の質問のお得な情報:
+ (instancetype)createInstance:(MyObject*)dependency {
typeof(self) instance = [[self alloc] init];
instance.dependency = dependency;
return instance;
}
self
はクラスであり、そしてtypeof(class)
はちょうどClass
ですが、いくつかのがあるので、これは動作しません私はtypeof(インスタンス)と同じ柔軟性を持つことができるinstancetype
に相当するローカル変数のためのメカニズム?たとえば:
+ (instancetype)createInstance:(MyObject*)dependency {
instanceof(self) instance = [[self alloc] init]; //desired keyword
instance.dependency = dependency;
return instance;
}
私は本当にこれが正式に望んでいた場合、私はこれに代わるものは、上記のように基本的に同じことを行い、プロトコルを定義することになるが、知っているのObjective-Cは希望宣言を許可する場合、私は好奇心が強いですスタイリッシュなスタイル。
私は@Robに同意します。なぜあなたはそれを一般的なものにしておきたいのか分かりません。 'TheClass *インスタンス= [[TheClass alloc] init]; instance.dependency = dependency; ' –
私の質問には実用的な理由はあまりありません。私はちょうど '[[self alloc] init]の呼び出しを強くタイプしているので、キーワードを見落としてしまったのか不思議でした。しかし、私は前にObjective-Cに関連するどんなSOの質問にも出てきたと思います... – Chris