0

有时我在使用 CG 元素时会感到困惑,并且有以下看起来很简单但给我带来麻烦的场景。

我有一个CGColorRef名为 的属性fillColor,为此我手动定义了 setter 方法,如下所示:

@property(nonatomic) CGColorRef fillColor;

- (void) setFillColor:(CGColorRef)fillColor
{
    CGColorRetain(fillColor); 
    CGColorRelease(_fillColor); 
    _fillColor = fillColor;
}

在我_fillColor达到某个值之后,我将它存储在一个数组中,如下所示:

_fillColors = [[NSArray alloc] initWithObjects:(id)_fillColor, nil];

我希望这样当 change 时self.fillColor,我希望数组中的值也发生变化。我显然可以创建一个指针,即CGColorRef *fillColor,但这样做我将如何管理内存(即释放、保留它)以及我的 setter 方法将如何改变?这真的让我很困惑。

4

1 回答 1

1

NSArray复制它的对象。 NSArray将收到您传入的指针的副本。这意味着您将获得指向结构的指针的副本CGColor(是的,CGColorRef已经是指针)。因此,改变任何一个都不会对另一个产生任何影响。存储指向的指针CGColorRef似乎是唯一的方法,而不是使用NSPointerArray(仅适用于 iOS 6+)。

编辑:最终结果是创建一个包含一个位置(路径、颜色等)的所有信息的类,并存储一个指向该位置的指针。

于 2012-09-26T02:02:28.527 回答