添加到UIScollView的UIImageViews永远不会被释放,内存泄漏?

时间:2011-09-28 13:38:24

标签: iphone ios uiscrollview uiimageview dealloc

这是我的第一篇文章,你是我最后的希望。

我的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。为什么内存没有被释放?????????

感谢您的任何建议,我整整三天都在努力,这让我发疯。

1 个答案:

答案 0 :(得分:0)

替换它:

self.myScrollView = nil;
self.myImage = nil;

[myScrollView release];
[myImage release];

用这个:

[myScrollView release];

self.myScrollView = nil;
self.myImage = nil;

并在代码中定义属性myScrollViewinit

你不需要循环for(UIImageView *subview in [myScrollView subviews])。当您release myScrollView对象时,它会自动释放其所有子视图。