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

mem*_*ons 3 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];
Run Code Online (Sandbox Code Playgroud)

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

_backImageView.tiledImage = nil, [_backImageView release], _backImageView = nil;
Run Code Online (Sandbox Code Playgroud)

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

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

Geo*_*che 7

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

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

TiledImage *imageView = [[TiledImage alloc] initWithFrame:IMAGE_FRAME];
self.backImageView = imageView;
[imageView release];
Run Code Online (Sandbox Code Playgroud)