gpt4 book ai didi

ios - 从 superview 中删除 UIImageView 后内存未释放

转载 作者:行者123 更新时间:2023-12-01 15:56:24 24 4
gpt4 key购买 nike

在 iOS 6.1 上,我有一个带有 scrollView 的 View Controller ,当用户轻拂页面时,我需要在其中显示一些图像。 scrollView 有 3 个 subview ,分别显示当前图像、上一张图像和下一张图像。图像在滚动过程中被替换。该机制运行良好,但资源未按预期释放,应用在滚动大约 15 张图像后终止。

起初我尝试简单地将新图像分配给 UIImageView 来解决问题,但它不起作用(我读到图像被缓存),所以我尝试了一种不同的方法:

// access the UIImageView of the currentView
for (UIView *subviewOfCurrentView in [currentView subviews]) {
if ([subviewOfCurrentView isKindOfClass:[UIImageView class]]) {
UIImageView *cv = (UIImageView *)subviewOfCurrentView;
//cv.image = nil;
[cv removeFromSuperview];
UIImageView *new_cv = [[UIImageView alloc] initWithFrame:photoRect];
new_cv.image = [UIImage imageNamed:[myObject getFileName];
[currentView addSubview:new_cv];

}
}

使用 Activity Monitor 分析应用程序表明,当我轻弹图像时,实际内存使用量不断增长,尽 pipe View 的数量保持不变。

请注意,应用程序在未调用 didReceiveMemoryWarning 的情况下终止。

如何强制我的应用释放 UIImage(s) 和 UIImageView(s) 使用的内存?

如果你能帮助我,不胜感激。

最佳答案

imageNamed: 加载的

UIImage 不会自动释放(它们被缓存并且同名图像共享相同的数据)。

如果您希望自动释放图像,请使用imageWithContentsOfFile:imageWithData:scale:。请注意,您可以使用 NSBundle 中的方法获取图像路径,尽管它会稍微复杂一些。

您必须自己实现以下部分

If the screen has a scale of 2.0, this method first searches for an image file with the same filename with an @2x suffix appended to it. For example, if the file’s name is button, it first searches for button@2x. If it finds a 2x, it loads that image and sets the scale property of the returned UIImage object to 2.0. Otherwise, it loads the unmodified filename and sets the scale property to 1.0.

不确定在使用新的 iOS 7 图片商店时如何获取图片的路径。

关于ios - 从 superview 中删除 UIImageView 后内存未释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18893455/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com