2010-05-12 4 views
3

У меня есть пользовательский UIView, называемый TiledImage, который имеет одно свойство с именем 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]; 

И в моем методе dealloc ViewController, я есть это:

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

Эта строка кода хит, но dealloc является никогда не вызывал TiledView. Обратите внимание, что _backImageView - это var, который использует свойство backImageView.

Может кто-нибудь дать мне идеи о том, что я могу делать неправильно, что предотвращает вызов dealloc на объект TiledImage?

+0

Похоже, что вы просачиваете память. 'dealloc' будет вызываться, когда счетчик ссылок равен нулю. Можете ли вы опубликовать код, в котором вы создаете свой 'TileImage'? Возможно, вы установили его в свойство 'keep' и никогда не выпустили его или что-то в этом роде. – pgb

ответ

7

Если self.backImageView является собственностью retain, у вас есть утечка памяти - TiledImage имеет счетчик удержания 1 до вызова установщика 2 после этого.

Ваш код для добавления вида должен выглядеть, например. вместо этого:

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

Что-то настолько очевидное, что я смотрел снова и снова. Спасибо. Время для просмотра руководства по управлению памятью какао. – memmons

Смежные вопросы