#iphone #uikit
#iPhone #uikit
Вопрос:
Например:
UILabel *lblEmail = [[UILabel alloc] initWithFrame:CGRectMake(20, 10, 70, 30)];
[lblEmail setBackgroundColor:[UIColor clearColor]];
[lblEmail setText:@"Email"];
[lblEmail setTag:1];
[contentView addSubview:lblEmail];
[lblEmail release];
В приведенном выше коде мы создаем одну UILabel и освобождаем ее, и, следовательно, у нее больше нет ссылки на память, но все равно она работает, пока я запускаю приложение. и мы также можем изменить его значение, используя viewWithTag. Другим примером может быть то, что я создаю одну кнопку и отпускаю ее, но все равно, когда пользователь нажимает на кнопки, это работает.
Ответ №1:
В режиме просмотра содержимого сохранена метка / кнопка, поэтому она все еще доступна. Вы создаете его с числом сохранений, равным 1, добавление его в contentView дает ему количество сохранений, равное 2, а его освобождение дает ему количество сохранений, равное 1. Итак, он все еще существует.
Ответ №2:
Он не освобождается из памяти. Вы просто освобождаете свое сохранение этого. Когда вы добавляете его в качестве подвида contentView
, оно сохраняется там внутри.
Комментарии:
1. Да, я в курсе этого… но давайте возьмем пример формы регистрации, где в моем представлении содержимого есть 10 меток и 10 текстовых полей … тогда количество сохраняемых в моем contentView равно 21… как я могу справиться с такой ситуацией?
2. вы управляете этим, следуя простому правилу… если вы несете ответственность за создание (выделение / инициализация, копирование и т.д.) Или сохранение объекта, вы несете ответственность за освобождение.
3. Количество сохранений в вашем contentView НЕ равно 21. Если вы добавите 10 меток и 10 текстовых полей, КОЛИЧЕСТВО сохранений КАЖДОЙ метки и текстового поля будет равно 1, а в самом contentView количество сохранений равно 1 (при условии, что ничто другое в приложении не удерживает эти объекты).
4. Правильно, и в качестве дополнительного примечания: НЕ беспокойтесь о количестве сохранений в любой данный момент, просто несите ответственность за свои действия, которые увеличили его, и выпускайте по мере необходимости. Слишком много людей смотрят на retainCount и пытаются разобраться в этом.
Ответ №3:
В документах Apple указано — (void)addSubview:(UIView *) view сохраняет view и устанавливает следующего ответчика представления для получателя, который является его новым супервизором.
Ответ №4:
lblEmail будет освобожден только после того, как количество ссылок на него равно 0. Они сохраняются в contentView.
Ответ №5:
Прочитайте документацию Apple для addSubview
.
- (void)addSubview:(UIView *)view
Добавляемый вид. Это представление сохраняется получателем