0

Parse のPFQueryクラスをモデルにEMQueryして、自分のプロジェクト (PFQuery のサブクラスではない) 用に自分のクラスを作成しています。私の質問は、Parseが行う方法でクラスメソッドへの同様の呼び出しを実行したい場合( PFQuery *query = [PFQuery queryWith...])、これは正しいアプローチでしょうか?

+ (instancetype)queryWithType:(EMObjectType)objectType {
    EMQuery *query = [[self alloc] init];
    return [query initWithQueryType:objectType];
}

- (id)initWithQueryType:(EMObjectType)objectType {

    self = [super init];
    if (self) {

    }

    return self;
}
4

2 に答える 2

3

いいえ - スーパークラスの init を 2 回呼び出しているためです。

initWithQueryType は init への呼び出しを置き換える必要があります

+ (instancetype)queryWithType:(EMObjectType)objectType {
    EMQuery *query = [self alloc];
    return [query initWithQueryType:objectType];
}

例外は、クラスの init が何かを行う場合です。その場合、2 つの initinitinitWithQueryType:は、一方が他方を呼び出し、呼び出されたものだけが呼び出すように設定する必要があります。super initこれは指定されたイニシャライザです。

すべての初期化の主な説明は、 Apple ドキュメントのオブジェクトの初期化に関するセクションです。

于 2015-02-11T21:10:56.467 に答える