【问题标题】:Arc memory leaks and UIImage named iosArc 内存泄漏和 UIImage 命名为 ios
【发布时间】:2013-03-27 06:59:40
【问题描述】:
嗨,我基本上有两个问题
1) 在 ios6 xcode 4.2 ARC 环境中工作时是否仍需要处理内存泄漏,因为我知道 arc 只在作用域结束时调用。
2) 声明
self.profileImageView.image = [UIImage imageNamed:@"createProfile_addPhoto.png"];
它将图像放在内存中,这是屏幕的繁重过程。我在很多地方读过它,但没有找到任何替代代码来代替它。有没有更好的解决方案。
只是我需要处理内存问题。
【问题讨论】:
标签:
ios
memory-management
uiimageview
automatic-ref-counting
【解决方案1】:
使用 imageWithContentsOfFile:
代替
imageNamed
NSString *imagePath = [[NSBundle mainBundle]pathForResource:@"createProfile_addPhoto" ofType:@"png"];
self.profileImageView.image = [UIImage imageWithContentsOfFile:imagePath];
【解决方案2】:
我不知道我是否理解你的问题,但是:
1-ARC 管理 Objective-C 对象的所有内存,在 iOS6 中还有 GCD 队列
2-您使用的方法将图像缓存在内存中以供进一步调用。因此,如果您多次调用此图像是值得的(除非图像真的很大)。
如果您需要创建更小的范围,您可以将代码嵌入到 @autorelease 块中,这在处理循环时很有用,但如果您使用 -imageNamed:,我告诉过您将缓存图像。更好地使用-imageWithContentsOfFile:。
ARC 中的泄漏几乎是不可能的,如果您正在处理 Core Foundation 不透明类型,就会发生泄漏,这些类型不是由 ARC 自动管理的。使用 ARC 可能发生的情况是废弃内存或保留周期,从未听说过使用它的泄漏。
希望这可以帮助,
安德烈亚
【解决方案3】:
1) 是的,对于某些情况(即强参考周期)
2) [UIImage imageWithContentsOfFile:] 可以代替你。 imageNamed: 实现了一个缓存系统。但是,当内存紧张时,它会自行清除。