我有一个大的 UIScrollView,我在其中放置了 3-4 个相当大(320x1500 像素左右)的 UIImageView 图像图块。我将这些 UIImageViews 添加到我的 NIB 文件内的滚动视图中。我的控制器上有一个插座,那就是 UIScrollView。我为此使用了一个属性(非原子,保留),并对其进行了综合。
我的问题是:当我在内存监视器中观察到这一点时,我可以看到,当加载了所有这些图像的视图时(如预期的那样),使用的内存增加了很多。但是当我离开视图时,它和它的控制器被释放了,但似乎并没有放弃它们占用的内存附近的任何地方。当我将其中一个视图(我的应用程序中有几个)缩减为 1-3 个 320x460 的图像并保持其他所有内容相同时,它可以很好地重新捕获内存。
使用这么大的图像有什么问题吗?我在这段代码中做错了什么(粘贴在下面)?
这是导致问题的 viewController 的片段。
- (CGFloat)findHeight
{
UIImageView *imageView = nil;
NSArray *subviews = [self.scrollView subviews];
CGFloat maxYLoc = 0;
for (imageView in subviews)
{
if ([imageView isKindOfClass:[UIImageView class]])
{
CGRect frame = imageView.frame;
if ((frame.origin.y + frame.size.height) > maxYLoc) {
maxYLoc = frame.origin.y;
maxYLoc += frame.size.height;
}
}
}
return maxYLoc;
}
- (void)viewDidLoad {
[super viewDidLoad];
[self.scrollView setContentSize:CGSizeMake(320, [self findHeight])];
[self.scrollView setCanCancelContentTouches:NO];
self.scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
self.scrollView.clipsToBounds = YES;
self.scrollView.scrollEnabled = YES;
self.scrollView.pagingEnabled = NO;
}
- (void)dealloc {
NSLog(@"DAY Controller Dealloc'd");
self.scrollView = nil;
[super dealloc];
}
更新:我注意到另一个奇怪的现象。如果我不使用视图上的滚动,它似乎会挂在内存上。但是,如果我滚动一堆并确保所有 UIImageViews 在某一时刻都可见,它将释放并重新获得它丢失的大部分内存。
UPDATE2:我问这个的原因是我的应用程序实际上由于内存不足而崩溃。我不介意它是否只是缓存和使用额外的内存,但它似乎永远不会释放它 - 即使在 didReceiveMmoryWarning 条件下