Iphone 将CGColorRef作为指针存储在NSArray中
在使用CG元素时,我有时会感到困惑,下面的场景看起来很简单,但给我带来了麻烦 我有一个名为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
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的指针,但它不允许我这样做,所以事情会变得复杂得多。我有一些数组存储一些图形的绘图数据,即一组可变路径及其相应的填充和笔划数据。我希望用户可以更改颜色,而不必重新加载图形的所有数据。创建一个存储该数据的类并将其存储在数组中。