В примере Sketch в -[<NSCopying> copyWithZone:]
не проверяется, если -[<NSObject> init]
возвращает nil
:
- (id)copyWithZone:(NSZone *)zone {
SKTGraphic *copy = [[[self class] alloc] init];
copy->_bounds = _bounds;
copy->_isDrawingFill = _isDrawingFill;
copy->_fillColor = [_fillColor copy];
copy->_isDrawingStroke = _isDrawingStroke;
copy->_strokeColor = [_strokeColor copy];
copy->_strokeWidth = _strokeWidth;
return copy;
}
Это означает, что во время выполнения будет нулевое разыменование, если оно вернет nil
(т.е. ошибка).
Обычно ли в -[<NSCopying> copyWithZone:]
программа не проверяет, возвращает ли -[<NSObject> init]
nil
? Должен ли я также сделать это нет? Я думаю об этом:
- (id)copyWithZone:(NSZone *)zone {
SKTGraphic *copy = [[[self class] alloc] init];
if (copy) {
copy->_bounds = _bounds;
copy->_isDrawingFill = _isDrawingFill;
copy->_fillColor = [_fillColor copy];
copy->_isDrawingStroke = _isDrawingStroke;
copy->_strokeColor = [_strokeColor copy];
copy->_strokeWidth = _strokeWidth;
}
return copy;
}