有时候在使用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方法将如何改变?这真让我感到困惑。
答案 0 :(得分:1)
NSArray
复制其对象。NSArray
将收到您传入的指针的副本。这意味着您将获得指向{{1}的指针的副本} struct(是的,CGColor
已经是一个指针)。因此改变任何一个都不会对另一个产生任何影响。除了使用CGColorRef
(仅限iOS 6 +)之外,存储指向CGColorRef
的指针似乎是唯一的方法。
编辑:最终结果是创建一个包含一个地方(路径,颜色等)的所有信息的类,并存储指向该类的指针。