iphone SDK:没有调用UIView dealloc。为什么?

时间:2010-05-12 19:37:42

标签: iphone memory-management uiview

我有一个名为TiledImage的自定义UIView,它有一个名为tilesImage的属性和一个自定义的drawRect方法。我将此视图添加到我的ViewController中,但是当取消分配ViewController时,即使我正在释放视图并将其设置为nil,也不会调用此视图的dealloc。可能是什么导致了这个?我没有对视图的任何其他引用,所以我的理解是它应该正确释放。

这是我将视图添加到视图控制器的方式:

NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"tile" ofType:@"png"];
UIImage *image = [[UIImage alloc] initWithContentsOfFile:imagePath];

self.backImageView = [[TiledImage alloc] initWithFrame:IMAGE_FRAME];
self.backImageView.tiledImage = image;
[self.view addSubview:self.backImageView];
[self.view sendSubviewToBack:self.backImageView];
[image release];

在我的ViewController的dealloc方法中,我有这个:

_backImageView.tiledImage = nil, [_backImageView release], _backImageView = nil;

该行代码被命中,但在TiledView上从未调用dealloc。请注意,_backImageView是属性backImageView使用的var。

有人可以给我一些关于我可能做错的想法,这会阻止调用TiledImage对象上的dealloc吗?

1 个答案:

答案 0 :(得分:7)

如果self.backImageViewretain属性,则表示内存泄漏 - TiledImage在调用setter之前保留计数为1,之后为2。

添加视图的代码应如下所示:以下是:

TiledImage *imageView = [[TiledImage alloc] initWithFrame:IMAGE_FRAME];
self.backImageView = imageView;
[imageView release];