我有以下问题:
我有一个扩展UIViewController类的类的实例,在这个类中我将UIImage添加到UIImageView,然后使用这个方法“addSubview:”[self.view addSubview:imageView]将UIImageView添加到self.view中。最后使用[[[UIApplication sharedApplication] keyWindow] addSubview:[self view]]将self.view添加到窗口,当我点击关闭按钮时,我正在清除self.view(删除子视图“UIImageView”)和从窗口中删除self.view。
现在的问题是,当我使用相同的实例将其他UIImageView添加到其他图像时,即使我已经释放它们并将它们从superview中删除,第一个数据也不会从内存中释放出来。以下代码说明了问题。
- (void) setImageWithURL: (NSString *)url {
NSData * imageData =NSData * imageData =[NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
if (imageData) {
UIImage *image = [[UIImage alloc]initWithData:imageData];
[[[UIApplication sharedApplication] keyWindow] addSubview:[self view]];
[self createViewWithImage:image];
[image release];
}
-(void) createViewWithImage: (UIImage *) image{
[self.view setHidden:false];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[self.view addSubview:imageView];
[imageView release];
}
// for removing the imageView when i click on close button
-(void) closeView{
for (UIView *subView in self.view.subviews) {
[subView removeFromSuperview];
}
[self.view removeFromSuperview];
}
注意:我使用xcode工具测试内存分配。
更新: 经过更多的研究..它不是addSubview& removeFromSuperview使内存泄漏..它的NSData。我不知道为什么它没有从记忆中释放出来。我做了一些更改来测试它是否真的是NSData,我在本地保存图像并使用两种情况设置图像:
//Case 1:
NSString *path = [[NSBundle mainBundle] pathForResource:@"image" ofType:@"png"];
NSData * imageData =[[NSData dataWithContentsOfFile:path];
image = [[UIImage alloc]initWithData:imageData];
//Case 2:
NSString *path = [[NSBundle mainBundle] pathForResource:@"image" ofType:@"png"];
image = [[UIImage alloc] initWithContentsOfFile:path];
我发现案例1使内存泄漏,而案例2是干净的。
现在UIImage无法在不使用NSData的情况下拍摄图像,并且由于某种原因NSData未发布..所以我该如何解决这个问题!!!!
答案 0 :(得分:0)
你有:
[super dealloc];
在你的派生类的dealloc中?