3

Sketchの例では、次の値が返さ-[<NSCopying> copyWithZone:]れる場合、inはチェックされません。-[<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;
}
4

1 に答える 1

2

コピーがインスタント変数に直接アクセスしているため、コピーがnilの場合はクラッシュするため、同意してnilをチェックする必要があると言わなければなりません。プロパティとメソッドにアクセスするだけであれば、問題にはなりません。

于 2011-07-15T12:55:41.483 に答える