这是我的第一篇文章,你是我最后的希望。
我的iPad应用中有一个包含图片的列表,如果您选择一个,我的课程MyViewController
会加载并展示UIViewController
{仅通过设置window.rootViewController
,使用{ {1}},UINavigationController
- 尝试了一切,没有任何区别)。它内部有一个presentModalViewController
,它会使用以下代码将大图像添加到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
内(nonatomic, retain)
类型的UIImageView
属性。
按下按钮并返回图像列表后,我释放对MyViewController
的引用,它的dealloc方法被调用如下:
MyViewController
它到目前为止工作,但问题是,图像的内存并没有真正解除分配。打开和关闭大约12张图像后,应用程序崩溃并显示内存警告。 我从这里得到的report_memory方法也证实了这一点: iOS Low Memory Crash, but very low memory usage
调用dealloc方法IS,进行三重检查。
我通过调试器中的断点检查了变量- (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];
}
和myImage
,它们被myScrollView
方法中的那些命令设置为0x0。为什么内存没有被释放?????????
感谢您的任何建议,我整整三天都在努力,这让我发疯。
答案 0 :(得分:0)
替换它:
self.myScrollView = nil;
self.myImage = nil;
[myScrollView release];
[myImage release];
用这个:
[myScrollView release];
self.myScrollView = nil;
self.myImage = nil;
并在代码中定义属性myScrollView
和init
。
你不需要循环for(UIImageView *subview in [myScrollView subviews])
。当您release
myScrollView
对象时,它会自动释放其所有子视图。