Как заставить релиз в iOS5? Или есть лучший способ сделать это с UILabel? - PullRequest
0 голосов
/ 07 сентября 2011

Я пишу довольно простое приложение, которое порождает поток, который в конечном счете вызывает следующий метод для помещения UILabel в определенное место.Я ожидал, что ARC очистит этикетки, когда метод закроется.Я был неправ.:)

Есть ли способ заставить их убрать или есть что-то очевидное, чего мне не хватает?Спасибо!

-(void) drawNumberLabel:(NSString *)labelText xloc:(float)xLocation yLoc:(float)yLocation {

    UILabel *tempLabel;
    tempLabel = [[UILabel alloc] initWithFrame:CGRectMake(xLocation, yLocation, 27.0, 59.0)];
    tempLabel.font = [UIFont fontWithName:@"Helvetica" size:fontSize];
    tempLabel.text = labelText;
    tempLabel.backgroundColor = backgroundColor;
    tempLabel.textColor = textColor;
    [self addSubview:tempLabel];

}

Ответы [ 2 ]

1 голос
/ 22 сентября 2011

Что вы подразумеваете под «очистить этикетки»? Вы ожидаете, что tempLabel будет освобожден в конце этого метода? Это не так, потому что когда вы звоните [self addSubview:tempLabel], ваше представление сохраняет метку. Когда суперпредставление отменено, добавленные вами ярлыки также будут освобождены.

0 голосов
/ 07 сентября 2011

Когда вы используете ARC (автоматический подсчет ссылок), вы никогда не должны делать какие-либо вызовы управления памятью, потому что компилятор вставит эти операторы для вас во время компиляции.[tempLabel release]; до конца вашего метода во время компиляции.

Однако, поскольку вы добавили метку в качестве подпредставления для представления, содержащее представление сохранит метку, аярлык не будет выпущен, пока вы не удалите ярлык из этого представления.

...