+(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)] ];
}
}
}
}
Kompiliert den obigen Code mit aktiviertem ARC. Das Analyse-Tool meldet einen möglichen Speicherverlust, da imageWithCGImage :: den Wert UIImage mit dem Wert +1 zurückgibt. Dann ist der Verweis verloren. Leaks Instrument meldet überhaupt keine Speicherlecks. Was ist denn hier los?Speicherleck mit ARC
Darüber hinaus, da ARC die Verwendung von manuell mit release
ect verbietet, wie repariert man das Leck?
Vielen Dank an jeden, der Ihnen einen Rat geben kann.
Siehe auch die akzeptierte Antwort auf meine Frage hier: http://stackoverflow.com/questions/6260256/what-kind-of-leaks-does-automatische-reference-counting-in-objective-c-not-prevent/6388601 # 6388601 – BoltClock
"Die create-Regel besagt, dass jede C-Interface-Methode mit" create "in ihrem Namen ein +1-Fundament-Objekt zurückgibt, das wir manuell freigeben müssen." - Dah! Na sicher. Danke CodaFi! Geschätzt! –
@ Z.O. Kein Problem. Die Erstellungsregel ist in den Dokumenten zwar etwas schwer zu finden, aber sie ist sehr wichtig im Umgang mit C-Interfaces von Apple. [Hier ist es] (https://developer.apple.com/library/mac/documentation/CoreFOundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html#//apple_ref/doc/uid/20001148-103029) (zusammen mit der Regel bekommen). – CodaFi