Изменение представления после addSubview, что является хорошей практикой? - PullRequest
3 голосов
/ 04 ноября 2011

Это может звучать как вопрос новичка, однако я новичок в iOS dev.Предположим, у вас есть этот код.

UILabel* label = [[UILabel alloc] init];
...
[someScrollView addSubview:label];
...
label.text = @"Some Text";

Это хорошая практика, чтобы изменить представление после addSubview?На самом деле мое беспокойство заключается в том, что, возможно, возможно, что ярлык будет выпущен до достижения label.text назначения, например, в viewDidUnload, верно?и назначение не будет выполнено.

В целом мои вопросы

  • это хорошая практика для изменения представлений после addSubview?
  • это хорошая практика, чтобы освободить представление после addSubviewи позже, если мне нужно получить какое-либо подпредставление, чтобы найти его, используя следующую технику for (UIView *view in self.subviews) { if (...) ... }?

Ответы [ 3 ]

3 голосов
/ 04 ноября 2011
  1. Можно изменить свойства представления после добавления его в качестве подпредставления.Эти свойства будут применены (или анимированы) на следующем ходу цикла выполнения, когда UIKit рендерит вещи.

  2. Вы должны полностью освободить свое представление после добавления его в качестве подпредставления, если вам больше не нужно владеть им.Другими словами, следуйте рекомендациям по управлению памятью для всех программ какао.Выполнение addSubview приведет к тому, что обязывающее представление сохранит его (поскольку оно нуждается в нем).Если в будущем вам потребуется изменить свойство в представлении, вам следует сохранить его, чтобы иметь к нему доступ

1 голос
/ 04 ноября 2011

Ваш код в порядке, если он все в одном методе и label не переназначается ни в одном из ... разделов.

Изменение представления до или после добавления его в подпредставление не имеет значения.

Если вы выделили представление, затем добавили его в подпредставление и не хотите хранить отдельную ссылку на него, вы должны освободить его - это стандартное управление памятью.Супер вид сохранит свои подпредставления.

Чтобы снова получить ссылку на ваше подпредставление, у вас есть два варианта:

  • Установите тег в подпредставлении перед его добавлением, затем используйте viewWithTag:, чтобы получить его позже
  • Сохраните ссылку на подпредставление в качестве переменной экземпляра (в этом случае вы не будете выпускать его после создания, вы выпустите его на dealloc).
0 голосов
/ 04 ноября 2011
  • Я использовал оба способа - модификацию до и после, и не было никаких проблем в любом случае.Суперпредставление сохраняет подпредставление, поэтому, если вы не откроете суперпредставление или не установите где-нибудь подпредставление в NIL, вы в полной безопасности.

  • Да, вам необходимо освободить представлениевы добавили после addSubview, но проще всего сделать это так:

UILabel* label = [[[UILabel alloc] init] autorelease];

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

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