2015-07-10 74 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