0

CG要素を扱うときに混乱することがあります。次のシナリオは単純に見えますが、問題が発生します。

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が、そうすることで、メモリをどのように管理し(つまり、解放して保持し)、セッターメソッドをどのように変更しますか?これは本当に私を混乱させます。

4

1 に答える 1

1

NSArrayそのオブジェクトをコピーします。 NSArray渡したポインタのコピーを受け取ります。つまり、CGColor構造体へのポインタのコピーを取得します(はい、CGColorRefすでにポインタです)。したがって、どちらかを変更しても、もう一方に影響を与えることはありません。(iOS 6以降のみ)CGColorRefを使用する以外に、へのポインタを保存することが唯一の方法のようです。NSPointerArray

編集:最終結果は、すべての情報(パス、色など)を1つの場所に含むクラスを作成し、代わりにそれへのポインターを格納することでした。

于 2012-09-26T02:02:28.527 に答える