Авто-релиз и селекторы - PullRequest
       2

Авто-релиз и селекторы

0 голосов
/ 10 февраля 2011

Я не совсем понимаю, использует ли UIView addTarget: action: сохранение этого представления. В частности, у меня есть UITableView с пользовательскими представлениями ячеек, которые зарегистрированы с событием на контроллере представления. Эти ячейки автоматически высвобождаются.

UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

UIView *cellView = [[UIView alloc] initWithFrame:viewRect];


[cellView addTarget:self action:@selector(dosSomething:) forControlEvents:UIControlEventTouchUpInside]; //is this not a good idea?

[cellView autorelease]; //will this get released?
}

Ответы [ 2 ]

1 голос
/ 10 февраля 2011

addTarget:action:forControlEvent: никак не влияет на количество сохраняемых представлений.Способ, которым вы звоните autorelease, теперь в порядке;Ваш вид будет помещен в пул авто-релизов и в конечном итоге выпущен.

Обратите внимание, что для того, чтобы ваш просмотр был полезным, вы должны добавить его в качестве подпредставления к другому представлению (например, вашей ячейке).Это представление сохранит его там, потому что оно перешло во владение вашим представлением, но, позвонив autorelease, вы тут корректно обрабатываете вещи.

0 голосов
/ 10 февраля 2011

Вы можете выпустить cellView здесь. нет проблем с выпуском cellView, и это не приведет к сбою. Но убедитесь, что вы не используете это представление позже в этой функции, и добавьте cellView к представлению содержимого вашей ячейки перед выпуском cellView.

UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

UIView *cellView = [[UIView alloc] initWithFrame:viewRect];


[cellView addTarget:self action:@selector(dosSomething:) forControlEvents:UIControlEventTouchUpInside]; //is this not a good idea?

[cell.contentView addSubView:cellView];

[cellView release]; //will this get released?
}

Это будет отлично работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...