2012-09-26 56 views
0

有時候在處理CG元素時會感到困惑,並且有下面這個看起來很簡單但給我帶來麻煩的場景。將CGColorRef作爲指針存儲在NSArray中

我有一個CGColorRef屬性調用fillColor,爲此,我手動定義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結構的指針副本(是的,CGColorRef已經是指針)。所以改變任何一個都不會對另一個產生任何影響。除了使用NSPointerArray(僅限iOS 6+)以外,存儲指向CGColorRef的指針似乎是唯一的方法。

編輯:最終的結果是製作一個包含所有信息的類(路徑,顏色等)並存儲指針。

+0

你將如何管理指針的內存,我認爲這讓我很困惑,我的setter方法會改變(除了指針語法) –

+0

即,它現在是否會成爲一個對象我會保留? –

+0

我想你可能想重新思考你的應用的邏輯。你爲什麼需要以這種方式存儲東西?我只是嘗試添加一個指向NSArray的指針,它不會讓我這樣做會變得更復雜。 – borrrden