将 CGColorRef 作为指针存储在 NSArray 中
Posted
技术标签:
【中文标题】将 CGColorRef 作为指针存储在 NSArray 中【英文标题】:Storing CGColorRef in NSArray as Pointer 【发布时间】:2012-09-26 01:50:59 【问题描述】:我在处理 CG 元素时有时会感到困惑,并且有以下场景,看起来很简单,但给我带来了麻烦。
我有一个名为fillColor
的CGColorRef
属性,为此我手动定义了setter 方法,如下所示:
@property(nonatomic) CGColorRef fillColor;
- (void) setFillColor:(CGColorRef)fillColor
CGColorRetain(fillColor);
CGColorRelease(_fillColor);
_fillColor = fillColor;
在我_fillColor
到某个值之后,我将它存储在一个数组中,如下所示:
_fillColors = [[NSArray alloc] initWithObjects:(id)_fillColor, nil];
我希望这样当更改self.fillColor
时,我希望数组中的值也可以更改。我显然可以创建一个指针,即CGColorRef *fillColor
,但这样做我将如何管理内存(即释放、保留它)以及我的setter 方法将如何改变?这真的让我很困惑。
【问题讨论】:
【参考方案1】:NSArray
复制其对象。NSArray
将收到您传入的指针的副本。这意味着您将获得指向 CGColor
结构的指针的副本(是的,@ 987654324@ 已经是一个指针)。因此,改变任何一个都不会对另一个产生任何影响。存储指向CGColorRef
的指针似乎是唯一的方法,而不是使用NSPointerArray
(仅适用于ios 6+)。
编辑:最终结果是创建一个类,将所有信息(路径、颜色等)包含在一个位置,并存储一个指向该位置的指针。
【讨论】:
你将如何管理指针的内存,我觉得这让我很困惑,我的 setter 方法是否会改变(除了指针语法) 即,它现在会成为我要保留的属性的对象吗? 我认为您可能需要重新考虑您的应用程序的逻辑。为什么需要以这种方式存储东西?我只是尝试添加一个指向 NSArray 的指针,但它不会让我这样做,所以事情会变得更加复杂。 我有一些数组存储一些图形的绘图数据,即一堆 mutablePaths 及其相应的填充和描边数据。我希望用户无需重新加载图形的所有数据即可更改颜色。 创建一个类来存储该数据并将 IT 存储在一个数组中。以上是关于将 CGColorRef 作为指针存储在 NSArray 中的主要内容,如果未能解决你的问题,请参考以下文章