gpt4 book ai didi

objective-c - 我应该在 copyWithZone :? 中检查 nil

转载 作者:搜寻专家 更新时间:2023-10-30 20:22:29 25 4
gpt4 key购买 nike

在 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,那么在运行时将有一个 null 解引用。 (即错误)。

通常在-[<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;
}

最佳答案

我不得不同意并说它应该检查 nil,因为副本正在直接访问即时变量,如果副本为 nil,这将导致崩溃。如果它只是访问属性和方法,那将不是问题。

关于objective-c - 我应该在 copyWithZone :? 中检查 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6707173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com