iphone SDK: не вызывается UIView. Зачем? - PullRequest
3 голосов
/ 12 мая 2010

У меня есть пользовательский UIView с именем TiledImage, который имеет одно свойство с именем tiledImage и пользовательский метод drawRect. Я добавляю это представление в мой ViewController, но когда ViewController освобождается, коллоидный вызов для этого представления никогда не вызывается, хотя я освобождаю представление и устанавливаю его равным nil. Что может быть причиной этого? У меня нет никаких других ссылок на представление, поэтому я понимаю, что оно должно выпускаться правильно.

Вот как я добавляю представление в свой контроллер вида:

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 - это переменная, которую использует свойство backImageView.

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

1 Ответ

7 голосов
/ 12 мая 2010

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

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

TiledImage *imageView = [[TiledImage alloc] initWithFrame:IMAGE_FRAME];
self.backImageView = imageView;
[imageView release];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...