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