一部のグラフィックをCGLayersにキャッシュしてから、@ encodeを使用してNSValueオブジェクトに格納しています(配列に格納するため)。保持/解放を正しく処理することを確認したかっただけです...
グラフィックをキャッシュして、次のような配列に保存します。
// Create an NSMutableArray "newCache"
CGLayerRef drawingLayer = CGLayerCreateWithContext(context, bounds.size, NULL);
CGContextRef drawingContext = CGLayerGetContext(drawingLayer);
// Do some drawing...
[newCache addObject:[NSValue valueWithBytes:&drawingLayer objCType:@encode(CGLayerRef)]];
CGLayerRelease(drawingLayer); // Is this release correct?
そして後で、レイヤーを取得します。
CGLayerRef retrievedLayer;
[(NSValue *)[cacheArray objectAtIndex:index] getValue:&retrievedLayer];
// Use the layer...
// Should I release retrievedLayer here?
配列(最初のコードスニペットの最後の行)に追加された後、レイヤーを解放する必要があると想定するのは正しいですか?コードの前半でcreate関数を呼び出したので、これが当てはまると思いました。NSValueは、レイヤーデータを追跡しますか?使用後にretrieveLayerを手動で解放する必要がありますか?
ありがとう