Objective-C在init中返回nil

时间:2015-07-10 15:50:15

标签: objective-c initialization

我有一个示例产品的模型。产品需要属性ID。 所以我认为这种模式不具备财产。 我实现了Product类的init方法。

- (instancetype)initWithProductId:(NSNumber *)productId {
    if ([productId integerValue] <= 0) {
       return nil;
    }
    self = [super init];
    if (self) {
        _productId = productId;
    }
    return self;
}

在启动方法中返回nil是否合法?我会遇到内存管理问题吗? 并且有人可以解释为什么它是合法的以及何时应该使用它。

1 个答案:

答案 0 :(得分:0)

几乎。显然有人调用了alloc来创建一个unitialised对象,现在调用你的init方法。使用您的代码,将不会调用超类init。取消分配对象时,将调用超类dealloc。但是,如果从未调用过类init,那可能会失败,具体取决于超类的实现。所以正确的方法是:

if ((self = [super init]) != nil) {
    if (productId.integerValue <= 0)
        return nil;
    _productId = productId;
}
return self;