Iphone 将CGColorRef作为指针存储在NSArray中

Iphone 将CGColorRef作为指针存储在NSArray中,iphone,ios,cocoa-touch,memory-management,core-graphics,Iphone,Ios,Cocoa Touch,Memory Management,Core Graphics,在使用CG元素时,我有时会感到困惑,下面的场景看起来很简单,但给我带来了麻烦 我有一个名为fillColor的CGColorRef属性,我手动为其定义setter方法,如下所示: @property(nonatomic) CGColorRef fillColor; - (void) setFillColor:(CGColorRef)fillColor { CGColorRetain(fillColor); CGColorRelease(_fillColor); _f

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

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

@property(nonatomic) CGColorRef fillColor;

- (void) setFillColor:(CGColorRef)fillColor
{
    CGColorRetain(fillColor); 
    CGColorRelease(_fillColor); 
    _fillColor = fillColor;
}
_fillColors = [[NSArray alloc] initWithObjects:(id)_fillColor, nil];
将I
\u fillColor
设置为某个值后,我将其存储在一个数组中,如下所示:

@property(nonatomic) CGColorRef fillColor;

- (void) setFillColor:(CGColorRef)fillColor
{
    CGColorRetain(fillColor); 
    CGColorRelease(_fillColor); 
    _fillColor = fillColor;
}
_fillColors = [[NSArray alloc] initWithObjects:(id)_fillColor, nil];
我希望在更改self.fillColor时,数组中的值也能更改。显然,我可以创建一个指针,即
CGColorRef*fillColor
,但在这样做时,我将如何管理内存(即释放,保留内存),我的setter方法将如何更改?这真让我困惑。

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


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

您如何管理指针的内存,我想这让我有点困惑,我的setter方法是否会改变(指针语法除外)即,它现在会成为我保留的财产的对象吗?我想你可能想重新思考你的应用程序的逻辑。为什么你需要以这种方式存储东西?我只是尝试添加一个指向NSArray的指针,但它不允许我这样做,所以事情会变得复杂得多。我有一些数组存储一些图形的绘图数据,即一组可变路径及其相应的填充和笔划数据。我希望用户可以更改颜色,而不必重新加载图形的所有数据。创建一个存储该数据的类并将其存储在数组中。