запоминание манипуляций с подпредставлением - PullRequest
0 голосов
/ 17 августа 2011

сохраняет ли это мое подпредставление дважды?

- (void)viewDidLoad
{
CGRect frame=CGRectMake(0, 0, 320, 460);
mapButtons*newButtons=[[mapButtons alloc] initWithFrame:frame];
self.mapButtons=newButtons;
[newButtons release];

[self.view addSubview:self.mapButtons];

[self.mapButtons addButtons:@"yo"];

Как только он добавляется в иерархию представлений с помощью addSubview, получает ли он дополнительный счет удержания сверх того, который хранится в ivar, self.mapButtons?

я хочу иметь возможность легко манипулировать этим подпредставлением, отсюда и ивар; Это хороший способ или есть лучший способ?

1 Ответ

0 голосов
/ 17 августа 2011

РЕДАКТИРОВАТЬ Вы упомянули memory-wise, так что я думаю, что, возможно, потребуется некоторое прояснение.Каждый объект имеет счет сохранения, который увеличивается на retain и уменьшается на release.Когда счет сохранения достигает 0, отправляется сообщение dealloc.Поэтому, когда вы добавляете дополнительное сохранение к объекту, который больше не используете память, вы просто увеличиваете счетчик и не производите никакого дублирования.

Есть несколько способов получить ссылку на представлениено то, как вы это делаете, это хороший способ.Альтернативой было бы пометить представление и извлечь его из self.view, используя

UIView *view = [self.view viewWithTag:tagId];

Я предпочитаю способ ivar, например, как вы это сделали (это изменится, когда войдет ARC), но я не склонен кбеспокоиться о фактическом сохранении количества объектов.Я концентрируюсь на балансировке моих сохранений / выпусков.

Поэтому я использую правило, согласно которому, если это локальная переменная, я стараюсь, насколько это возможно, сопоставлять свои сохранения / выпуска в пределах области, в которой она определена. Исключением является ivarкоторые выпущены в dealloc

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