2015-07-10 39 views
0

我有一个模型,例如产品。产品需要属性ID。 所以我认为模型不能没有财产。 我的Product类的init方法的实现。Objective-C返回无内部初始化

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

在initilization方法中返回nil是否合法?我会得到内存管理问题吗? 有人可以解释为什么它是合法的,什么时候应该使用它。

回答

0

差不多。显然有人调用了alloc来创建一个单元化对象,现在正在调用你的init方法。用你的代码,超类init不会被调用。当对象被释放时,超类dealloc被调用。但是,如果superclass init从未被调用,这可能会失败,这取决于您的超类的实现。所以正确的方法是:

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

我测试这种情况。我发现''dealloc'方法在'[super init]'之前返回nil时执行。但是我也问过,如果对象在没有'productId'的情况下不能有任何东西,就返回'init'方法中的nil是正确的方法(例如) – rowwingman