Reputation: 2460
I'm curious if I'm following proper memory management with CGImageRef, which I'm passing through several methods (since it's CG object, I assume it doesn't support autorelease). Memory management with non-NSObjects and interaction with other NSObjects is still somewhat new to me.
Here what I'm doing:
I'm creating the CGImageRef inside my image cache manager with CGBitmapContextCreateImage (retain count 1), and adding it to the NSMutableDictionary (retain count 2).
When CALayers use the image, I assign with layer.contents (retain count +1), and clearing contents with layer.contents = nil (retain count -1) before removing the layer.
Finally, when clearing the texture, I call CGImageRefRelease and [NSMutableDictionary removeObject] to have retain count as 0.
Is this a proper way to do so?
Upvotes: 3
Views: 17870
Reputation: 96323
Core Foundation objects (which all Core Graphics objects are) do support autorelease.
The steps you describe should work just fine and not leak or over-release the object.
I use CFRelease
instead of specific-class release functions like CGImageRelease
, but purely as a matter of style. I just have to beware of NULL
: CGImageRelease
checks for NULL
, whereas CFRelease
will crash when passed NULL
. Using CGImageRelease
and its siblings means you don't have to worry about this.
I'm assuming you meant removeObject:forKey:
, not removeObject
(which doesn't exist and wouldn't have somewhere to specify an object anyway).
Upvotes: 17