我有一个很大的UIScrollView,里面放了3-4个相当大的(大约320x1500像素)UIImageView图像块。这些UIImageView被添加到我的NIB文件中的滚动视图中。我的控制器上只有一个插座,即用于UIScrollView的。我为此使用属性(nonatomic,retain),并合成它。
我的问题是:当我在Memory Monitor中观察时,在加载所有这些图像的视图时,使用的内存会增加相当多(预料之中)。但是当我离开该视图时,它及其控制器都被dealloc'd,但似乎没有释放掉它们所占用的远远不足的内存。当我将其中一个视图(我的应用程序中有几个)减少到仅包含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];
}
更新:我注意到另一个奇怪的现象。如果我不使用视图上的滚动条,它似乎会占用内存。但是,如果我频繁滚动并确保所有UIImageView在某个时刻都可见,它将释放并重新获得失去的大部分内存。
更新2:我之所以问这个问题是因为我的应用程序实际上由于低内存而崩溃。如果它只是缓存并使用额外的内存,我也不介意,但似乎从来没有释放它 - 即使在didReceiveMmoryWarning条件下也是如此。