我有一个示例产品的模型。产品需要属性ID。 所以我认为这种模式不具备财产。 我实现了Product类的init方法。
- (instancetype)initWithProductId:(NSNumber *)productId {
if ([productId integerValue] <= 0) {
return nil;
}
self = [super init];
if (self) {
_productId = productId;
}
return self;
}
在启动方法中返回nil是否合法?我会遇到内存管理问题吗? 并且有人可以解释为什么它是合法的以及何时应该使用它。
答案 0 :(得分:0)
几乎。显然有人调用了alloc来创建一个unitialised对象,现在调用你的init方法。使用您的代码,将不会调用超类init。取消分配对象时,将调用超类dealloc。但是,如果从未调用过类init,那可能会失败,具体取决于超类的实现。所以正确的方法是:
if ((self = [super init]) != nil) {
if (productId.integerValue <= 0)
return nil;
_productId = productId;
}
return self;