+(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)] ];
}
}
}
}
के साथ मेमोरी लीक एआरसी सक्षम के साथ उपरोक्त कोड संकलित। विश्लेषण टूल एक संभावित स्मृति रिसाव की रिपोर्ट करता है क्योंकि imageWithCGImage :: गिनती +1 के साथ UIImage लौटाता है, तो संदर्भ खो जाता है। लीक्स इंस्ट्रूमेंट में कोई मेमोरी लीक नहीं है। यहाँ क्या चल रहा है?एआरसी
इसके अलावा, के बाद से एआरसी मैन्युअल release
ect का उपयोग कर का उपयोग प्रतिबंधित है, कैसे एक रिसाव को ठीक करता है?
किसी को धन्यवाद जो किसी भी सलाह की पेशकश कर सकते हैं।
यहां मेरे प्रश्न का स्वीकार्य उत्तर भी देखें: http://stackoverflow.com/questions/6260256/what-kind-of-leaks-does-automatic-reference-counting-in-objective-c-not-prevent/6388601 # 6388601 – BoltClock
"नियम बनाने का कहना है कि के साथ किसी भी सी-इंटरफेस विधि" बनाने "यह के नाम पर एक +1 आधार वस्तु है, जो हम स्वयं को रिहा करना चाहिए देता है।" - दोह! बेशक। धन्यवाद कोडाफ़ी! की सराहना की! –
@ जेडओ। कोई बात नहीं। निर्माण नियम वास्तव में दस्तावेज़ों में खोजने के लिए थोड़ा मुश्किल है, लेकिन ऐप्पल के सी-इंटरफेस से निपटने पर यह बहुत महत्वपूर्ण है। [यहां यह है] (https://developer.apple.com/library/mac/documentation/CoreFOundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html#//apple_ref/doc/uid/20001148-103029) (साथ ही नियम प्राप्त करें)। – CodaFi