objective-c – ARC存储器泄漏

objective-c – ARC存储器泄漏,第1张

概述+(void)setup { UIImage* spriteSheet = [UIImage imageNamed:@"mySpriteSheet.png"]; CGRect rect; animation = [NSMutableArray arrayWithCapacity:numberOfFramesInSpriteSheet]; int frameCount
+(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)] ];            }         }    }}

在启用ARC的情况下编译上面的代码. Analyze工具报告可能的内存泄漏,因为imageWithCGImage ::返回计数为1的UIImage,然后引用丢失.泄漏仪器报告根本没有内存泄漏.这里发生了什么?

此外,由于ARC禁止使用手动释放等,如何修复泄漏?

感谢任何能提供任何建议的人.

解决方法 ARC不管理C类型,可以考虑CGImage.完成CGImageRelease(图像)后,必须手动释放引用;
+(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,frameWIDth);                //store our image ref so we can release it later                //The create rule says that any C-interface method with "create" in it's name                 //returns a +1 foundation object,which we must release manually.                CGImageRef image = CGImageCreateWithImageInRect(Spritesheet.CGImage,rect)                //Create a UIImage from our ref.  It is Now owned by UIImage,so we may discard it.                [animation addobject:[UIImage imageWithCGImage:image]];                //discard the ref.                  CGImageRelease(image);            }         }    }}
总结

以上是内存溢出为你收集整理的objective-c – ARC存储器泄漏全部内容,希望文章能够帮你解决objective-c – ARC存储器泄漏所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1241909.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存