iOS:正确初始化对象的方法?

时间:2015-02-11 21:05:22

标签: ios objective-c initialization class-method instance-methods

以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;
}

2 个答案:

答案 0 :(得分:3)

不 - 因为你两次调用超类的init。

您的initWithQueryType应该替换对init

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

例外情况是你班级中的init做了什么。在这种情况下,应设置两个inits initinitWithQueryType:,其中一个调用另一个,而被调用的一个是唯一调用super init的那个。这个是指定的初始值

所有初始化的主要解释是关于对象初始化Apple document

的部分

答案 1 :(得分:0)

不要调用两个init方法;打电话给一次。像这样:

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