【发布时间】:2011-09-28 13:38:23
【问题描述】:
这是我的第一篇文章,你是我最后的希望。
我的 iPad 应用程序中有一个包含图像的列表,如果您选择一个,我的类 MyViewController 扩展 UIViewController 被加载并显示(只需设置 window.rootViewController,使用 UINavigationController,@987654326 @ - 尝试了一切,没有任何区别)。它内部有一个UIScrollView,它使用以下代码将图像的大版本添加到UIScrollView:
UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[[delegate getImageNames] objectAtIndex:(gameNr*2)]]];
tempImageView.frame = CGRectMake(0,0,tempImageView.frame.size.width/2,tempImageView.frame.size.height/2);
[self setMyImage:tempImageView];
[tempImageView release];
myScrollView.contentSize = CGSizeMake(myImage.frame.size.width, myImage.frame.size.height);
myScrollView.maximumZoomScale = 2.0;
myScrollView.minimumZoomScale = 1.0;
myScrollView.clipsToBounds = YES;
myScrollView.bounces = NO;
myScrollView.delegate = self;
[myScrollView addSubview: myImage];
myImage 是我的MyViewController 中UIImageView 类型的(nonatomic, retain) 属性。
按下按钮并返回图像列表后,我释放对MyViewController的引用,它的dealloc方法调用如下:
- (void)dealloc
{
CFShow(@"dealloc!");
for(UIImageView *subview in [myScrollView subviews]) {
if(subview.frame.size.width > 20){
[subview removeFromSuperview];
[subview setImage:nil];
}
}
[myImage setImage:nil];
self.myScrollView = nil;
self.myImage = nil;
[myScrollView release];
[myImage release];
[super dealloc];
}
到目前为止它可以工作,但问题是,图像的内存并没有真正以这种方式释放。打开和关闭大约 12 张图像后,应用程序崩溃并出现内存警告。 我从这里得到的 report_memory 方法也证实了这一点: iOS Low Memory Crash, but very low memory usage
调用了 dealloc 方法,进行了三次检查。
我在调试器中通过断点检查了变量myImage 和myScrollView,它们被dealloc 方法中的这些命令设置为0x0。为什么内存没有释放??????
感谢您的任何建议,我已经为此工作了整整三天,这让我发疯了。
【问题讨论】:
标签: iphone ios uiscrollview uiimageview dealloc