我有一個名爲TiledImage的自定義UIView,它具有一個名爲tiledImage的屬性和一個自定義drawRect方法。我將這個視圖添加到我的ViewController中,但是當ViewController被釋放時,這個視圖的dealloc永遠不會被調用,即使我釋放視圖並將其設置爲nil。什麼可能導致這個?我沒有任何其他的視圖引用,所以我的理解是它應該正確釋放。iphone SDK:未調用UIView 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;
這行代碼被擊中,但dealloc的是從未呼籲TiledView。請注意,_backImageView是屬性backImageView使用的var。
有人可以給我的想法,我可能會做的錯誤是阻止dealloc TiledImage對象被調用?
它看起來像你在泄漏記憶。當引用計數爲零時,將調用「dealloc」。你可以在你創建'TileImage'的地方發佈代碼嗎?也許你把它設置爲「保留」屬性,永遠不會釋放它,或者類似的東西。 – pgb 2010-05-12 19:41:17