Je dispose d'une fuite de mémoire lorsque vous utilisez cette méthode personnalisée qui retourne un CGIMageref. Je ne peux pas libérer correctement "cgimage" parce que je dois le retourner. Que dois-je faire?
4 Réponses :
Vous pouvez également renvoyer le CGIMAGE CODE> Envoyé à l'intérieur d'un cgimage code> appartient à votre méthode, vous devez le renvoyer et donner la responsabilité de l'appelant à la libérer via
cfrelease code>.
UIIMAGE code>, comme celui-ci: p>
UIImage *image = [UIImage imageWithCGImage:cgImage];
CFRelease(cgImage); //cgImage is retained by the UIImage above
return image;
Cette réponse n'est plus pertinente: «Cfrelease» est indisponible: les objets de base de base sont automatiquement géré la mémoire.
Ceci est un problème général avec les objets de base de base, car il n'y a pas de piscine d'autoraélase à cf. Comme je le vois, vous avez deux options pour résoudre le problème: P>
-Newrectrondedimageref: rayon: code> Pour dire à l'appelant qu'il s'approche de l'objet retourné et responsable de la libération. Li>
- envelopper le
cgimageref code> dans un uIImage code> uIImage renvoie ( [UIIMAGE imagewithcgimage:] code>). C'est probablement ce que je ferais. Li>
ol>
Vous pouvez autoriser un objet de base compatible de base. Cela a juste l'air un peu bonky. :)
La manière GC-Safe est comme: p> Le raccourci, qui est sûr sur iOS, mais plus sûr sur le Mac, est-ce: P> CGImageRef image = ...;
if (image) {
image = (CGImageRef)[(id)image autorelease];
}
Comme suggéré, nous avons utilisé: mais nous avons toujours une fuite de mémoire.
Notre solution consistait à envelopper le code avec un bloc P> et qui résoudra notre problème. p> p>
Toujours ne le libère pas correctement tbh
J'ai eu une fuite similaire. Essayez ma réponse ici: Stackoverflow.com/a/23669476/3631310