NSArray *imageExtension = [info.ThemeImage componentsSeparatedByString:@"."];
NSString *path = [[NSBundle mainBundle] pathForResource:[imageExtension objectAtIndex:0]ofType:@"png"];
UIImage *image = [[UIImage alloc]initWithContentsOfFile:path];
image=[image addImageReflection:0.50];
[CarouselView setFrame:CGRectMake(0,-200, image.size.width, image.size.height)];
UIButton *button = [[UIButton alloc]init];
[button setFrame:CGRectMake(0,0, image.size.width, image.size.height)];
[button setBackgroundImage:image forState:UIControlStateNormal];
[image release];
在释放对象图像后,我确实有内存泄漏......
我不知道为什么它会在仪器泄漏中显示内存泄漏
答案 0 :(得分:3)
上面的代码有三个问题会导致内存泄漏。
首先,您在此处创建image
:
UIImage *image = [[UIImage alloc]initWithContentsOfFile:path];
然后将指针image
分配给其他内容,从而丢失原始引用:
image=[image addImageReflection:0.50];
addImageReflection
我假设给你一个自动释放的对象。
尽管如此,您稍后会发布image
:
[image release];
此处发布的内容不是您分配的原始指针,而是后来分配的自动释放对象。所以你通过过度释放来创造第二个问题。
最后,你有第三个问题。您在此处创建的对象button
永远不会发布:
UIButton *button = [[UIButton alloc]init];
答案 1 :(得分:1)
[button release];
答案 2 :(得分:0)
你做完之后一样吗?
[[self view] addSubview:button];
[button release];
答案 3 :(得分:0)
这里你要分配一个新的UIImage
UIImage *image = [[UIImage alloc]initWithContentsOfFile:path];
这里你正在对图像做一些动作(反射?),可能这个函数会返回一个自动释放的实例。你将这个实例重新分配给你的原始实例变量。你将失去对原始图像实例的引用,它将会泄露。你也参考了一个自动释放的实例
image=[image addImageReflection:0.50];
你错误地试图在之后释放,这将导致崩溃..
[image release];