我想知道如何使用NSSecureCoding
當編碼時給定的屬性是nil
。看看下面的例子:- initWithCoder:當-decodeObjectOfClass:forKey:返回零
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self) {
_buffer = [aDecoder decodeObjectOfClass:[NSMutableData class] forKey:@"buffer"];
if (_buffer == nil) {
self = nil;
}
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder setValue:_buffer forKey:@"buffer"];
}
我創建設置self
的習慣nil
每當分配失敗,因爲它似乎是一個正確的模式。但是,在這種情況下,如果_buffer
的編碼是nil
,那麼在解碼時如何判斷分配失敗?
我不認爲你應該自我設置爲零。您創建該對象,其中一個屬性爲零。那有什麼問題? –
這是錯誤的,因爲它沒有被正確初始化。例如,可以說我正在用數據初始化('-initWithData:')。在某些時候,我會複製數據('_buffer = [NSMutableData dataWithData:data]')。如果此後'_buffer'爲'nil'(分配失敗),則該對象尚未正確初始化。你不應該像沒有任何事情那樣返回「自我」,因爲發生了一些事情。通過返回'self'(非'nil'),你會告訴調用者一切都會好起來的,事實並非如此。 –