0

在Parse的PFQuery類中建模,我爲自己的項目構建了自己的EMQuery類(不是PFQuery的子類)。我的問題是,如果我想以類似Parse的方式對類方法執行類似的調用(PFQuery *query = [PFQuery queryWith...]),這是否是正確的方法?iOS:初始化對象的正確方法?

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

- (id)initWithQueryType:(EMObjectType)objectType { 

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

    } 

    return self; 
} 

回答

3

否 - 當您調用超類的init兩次。

你initWithQueryType應更換調用init

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

唯一的例外是,如果在你的類初始化做一些事情。在這種情況下,兩個inits initinitWithQueryType:應設立一個呼叫其他與一個叫是調用super init這一個是指定的初始化器

所有初始化的主要解釋只有一個是關於對象的部分初始化Apple document

+0

啊我明白了。完美的解釋!謝謝你的鏈接。 :) – KingPolygon 2015-02-11 21:16:06

0

不要調用兩個init方法;打一次,一次。像這樣:

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

這不是一個就夠了。你必須調用一個且只有一個init方法。 – rmaddy 2015-02-11 22:42:33