+(void)setup {
UIImage* spriteSheet = [UIImage imageNamed:@"mySpriteSheet.png"];
CGRect rect;
animation = [NSMutableArray arrayWithCapacity:numberOfFramesInSpriteSheet];
int frameCount = 0;
for (int row = 0; row < numberFrameRowsInSpriteSheet; row++) {
for (int col = 0; col < numberFrameColsInSpriteSheet; col++) {
frameCount++;
if (frameCount <= numberOfFramesInSpriteSheet) {
rect = CGRectMake(col*frameHeight, row*frameWidth, frameHeight, frameWidth);
[animation addObject:[UIImage imageWithCGImage:CGImageCreateWithImageInRect(spriteSheet.CGImage, rect)] ];
}
}
}
}
Compilé le code ci-dessus avec ARC activé. L'outil Analyser signale une fuite de mémoire possible car imageWithCGImage :: renvoie UIImage avec count +1, puis la référence est perdue. Fuites L'instrument ne signale aucune fuite de mémoire. Que se passe t-il ici?Fuite de mémoire avec ARC
De plus, étant donné que l'ARC interdit l'utilisation manuelle de release
ect, comment réparer la fuite?
Merci à tous ceux qui peuvent offrir des conseils.
Voir aussi la réponse acceptée à ma question ici: http://stackoverflow.com/questions/6260256/what-kind-of-leaks-does-automatic-reference-counting-in-objective-c-not-prevent/6388601 # 6388601 – BoltClock
"La règle de création indique que toute méthode d'interface C avec" create "dans son nom renvoie un objet de base +1, que nous devons libérer manuellement." - Doh! Bien sûr. Merci CodaFi! Apprécié! –
@ Z.O. Aucun problème. La règle de création est en fait un peu difficile à trouver dans les docs, mais c'est très important quand on a affaire aux C-Interfaces d'Apple. [Ici c'est] (https://developer.apple.com/library/mac/documentation/CoreFOundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html#//apple_ref/doc/uid/20001148-103029) (avec le obtenir la règle). – CodaFi