2010-05-12 72 views
3

我有一個名爲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對象被調用?

+0

它看起來像你在泄漏記憶。當引用計數爲零時,將調用「dealloc」。你可以在你創建'TileImage'的地方發佈代碼嗎?也許你把它設置爲「保留」屬性,永遠不會釋放它,或者類似的東西。 – pgb 2010-05-12 19:41:17

回答

7

如果self.backImageViewretain屬性,則表明存在內存泄漏 - TiledImage在調用setter之前保留計數爲1,之後爲2。

您添加視圖的代碼應該看起來像代替如下:

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

一些顯而易見的東西,我一遍又一遍地看着。謝謝。我可以回顧一下可可內存管理指南。 – memmons 2010-05-14 17:38:27

相關問題