UITextView setEnabled: вызывает увеличение счетчика хранения? - PullRequest
0 голосов
/ 30 марта 2011

У меня есть UITextView, который имеет свои текстовые наборы из локальной переменной.Возможно ли, что после этого:

[textView setEnabled:NO];

Счет удержания увеличивается на единицу?

РЕДАКТИРОВАТЬ:

«Проблема», еслиэто проблема, в конструкторе небольшого представления:

- (id)initWithData:(NSMutableArray *) {
  UITextView *myText;
  if ( ( self = [super init] ) ) {
    myText = [[UITextView alloc] initWithFrame:aRect];
    // retain count = 1;
    [myText setEnabled:NO]; // retain count 2
    [self addSubview:myText]; // retain count 3
    [myText release];  // retain count 2
  }
}

Теперь я "автоматически выпустил" текстовое представление, но я не уверен, что память хорошо управляется (постсвязан с этим вопросом ).

1 Ответ

4 голосов
/ 30 марта 2011

возможно?Абсолютно.

Тебя это волнует?Ничуть.Только если вы переопределили setEnabled: в подклассе и вы - тот, кто делает вызов retain.

Если это так, то это деталь реализации в инфраструктуре.

Подумайте о том, чтобы сохранить счет как дельты, а не как абсолютные числа.Абсолютное значение не имеет смысла.Таким образом:

- (id)initWithData:(NSMutableArray *) {
  UITextView *myText;
  if ( ( self = [super init] ) ) {
    myText = [[UITextView alloc] initWithFrame:aRect]; // rc +1
    [myText setEnabled:NO]; // rc change irrelevant
    [self addSubview:myText]; // rc change irrelevant
    [myText release];  // rc -1
  }
}

Итак, да, вы правильно управляли памятью;в конце области действия локальной переменной myText все удержания были сбалансированы по версиям.

Когда вы addSubview:, этот метод сохраняет объект или делает его копию, является подробностью реализацииэто не относится к управлению памятью в этой области.Очевидно, что подпредставление поддерживает ссылку и сохраняет ее, что необходимо для ее целей, но это деталь реализации, выходящая за рамки управления этим методом!

...