将CGColorRef存储在NSArray中作为指针

时间:2012-09-26 01:51:00

标签: iphone ios cocoa-touch memory-management core-graphics

有时候在使用CG元素时会感到困惑,并且下面的场景似乎很简单但却给我带来了麻烦。

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

fillColor

@property(nonatomic) CGColorRef fillColor; - (void) setFillColor:(CGColorRef)fillColor { CGColorRetain(fillColor); CGColorRelease(_fillColor); _fillColor = fillColor; } 之后,我将其存储在数组中,如下所示:

_fillColor

我喜欢它,以便在更改_fillColors = [[NSArray alloc] initWithObjects:(id)_fillColor, nil]; 时,我希望它也可以更改数组中的值。我显然可以制作一个指针,即self.fillColor,但在这样做时我将如何管理内存(即释放,保留它)以及我的setter方法将如何改变?这真让我感到困惑。

1 个答案:

答案 0 :(得分:1)

NSArray复制其对象。 NSArray将收到您传入的指针的副本。这意味着您将获得指向{{1}的指针的副本} struct(是的,CGColor已经是一个指针)。因此改变任何一个都不会对另一个产生任何影响。除了使用CGColorRef(仅限iOS 6 +)之外,存储指向CGColorRef的指针似乎是唯一的方法。

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