将 CGColorRef 作为指针存储在 NSArray 中

Posted

技术标签:

【中文标题】将 CGColorRef 作为指针存储在 NSArray 中【英文标题】:Storing CGColorRef in NSArray as Pointer 【发布时间】:2012-09-26 01:50:59 【问题描述】:

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

我有一个名为fillColorCGColorRef 属性,为此我手动定义了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 中的主要内容,如果未能解决你的问题,请参考以下文章

如何自动释放 CGColorRef

ARC 和桥接铸件

指针作为函数参变量

C ++:指针作为哈希表中的键

5指针

将选择器作为值存储在 NSDictionary 中