Создание UIButton с использованием вспомогательного метода - PullRequest
0 голосов
/ 01 января 2011

У меня есть подкласс UITableView, и в нем я хочу сгенерировать количество меток с одинаковыми свойствами (font, textColor, backgroundColor и т. Д.).

Я решил, что самый простой способ добиться этого - создать вспомогательный метод, который создает метку с набором общих свойств:

- (UILabel *)defaultLabelWithFrame:(CGRect)frame {
    UILabel *label = [[UILabel alloc] initWithFrame:frame];
    label.font = [UIFont fontWithName:@"Helvetica" size:14];
    label.textColor = [UIColor colorWithWhite:128.0/255.0 alpha:1.0];
    label.backgroundColor = [UIColor clearColor];

    return label;
}

Я использую такой метод:

UILabel *someLabel = [self defaultLabelWithFrame:CGRectMake(0,0,100,100)];
[self addSubview:someLabel];
[someLabel release];

Меня беспокоит то, что при создании метки в методе сохраняется, но когда я затем назначаю ее для someLabel, она сохраняется снова, и у меня нет возможности освободить память при создании в методе .

Что будет лучшим подходом здесь?

У меня плата, как у меня есть два варианта:

  1. Создайте подкласс UILabel для типа метки по умолчанию.
  2. Создайте NSMutableArray с именем defaultLabels и сохраните метки в этом:
- (UILabel *)defaultLabelWithFrame:(CGRect)frame {
    UILabel *label = [[UILabel alloc] initWithFrame:frame];
    label.font = [UIFont fontWithName:@"Helvetica" size:14];
    label.textColor = [UIColor colorWithWhite:128.0/255.0 alpha:1.0];
    label.backgroundColor = [UIColor clearColor];

    [defaultLabels addObject:label];
    [labels release]; //I can release here
    return [defaultLabels lastObject]; //I can release defaultLabels when done
}

Я ценю ваши мысли. Приветствия.

1 Ответ

4 голосов
/ 01 января 2011

Вам просто нужно автоматически высвободить ваш объект перед его возвратом:

- (UILabel *)defaultLabelWithFrame:(CGRect)frame
{
   …
   return [label autorelease];
}

Большинство методов в Какао сохранят объекты по мере необходимости, включая addSubview:.Если ни один объект не использует (т.е. не сохраняет) метку, вам не нужно беспокоиться о ее утечке - она ​​уже добавлена ​​в пул автоматического выпуска и будет выпущена автоматически.

...