Je suis curieux si je suis la gestion de la mémoire appropriée avec CGImageRef, que je traverse plusieurs méthodes (puisque son objet CG, je suppose qu'il ne supporte pas autorelease). La gestion de la mémoire avec des objets non NSO et l'interaction avec d'autres objets NSO est encore un peu nouvelle pour moi.Libérer CGImage (CGImageRef)
Voici ce que je fais:
Je crée l'CGImageRef dans mon gestionnaire de cache d'image avec CGBitmapContextCreateImage (conserver le nombre 1), et en ajoutant à la NSMutableDictionary (conserver le nombre 2). Lorsque CALayers utilise l'image, j'affecte avec layer.contents (retain count +1) et efface le contenu avec layer.contents = nil (retain count -1) avant de supprimer le calque.
Enfin, pour dégager la texture, je l'appelle CGImageRefRelease et [NSMutableDictionary removeObject] pour avoir conserver le nombre 0.
Est-ce une bonne façon de le faire?
Merci pour le lien, excellente ressource, clarifie beaucoup. Docs mentionné que CGImageRelease ne provoquera pas une erreur si l'image est NULL, si sonnait plus sûr d'aller avec. removeObject: forKey: oui, celui-là. – Rudi
** Le document auquel vous associez ne prend pas en charge votre revendication. ** Certains objets de la base de données Core sont "sans frais pontés" vers les classes Cocoa, mais ils ne le sont pas tous. Vous pouvez transformer un 'CFStringRef' en un' NSString * 'et inversement, mais vous ne pouvez pas le faire avec' CGImageRef' et 'UIImage'. – benzado
Ma réclamation est que les objets CF supportent 'release' et' autorelease'. Ce document le dit explicitement: "Notez, à partir de l'exemple, que les fonctions et méthodes de gestion de la mémoire sont également interchangeables - vous pouvez utiliser' CFRelease' avec un objet Cocoa et 'release' et' autorelease' avec un objet Core Foundation. " La référence de CGImage indique que CGImage descend de CFType: http://developer.apple.com/iphone/library/documentation/GraphicsImaging/Reference/CGImage/ –