Как выпустить подпредставления - PullRequest
0 голосов
/ 02 апреля 2012

В моем приложении для iPhone / iPad

Я добавляю одно подпредставление к своему основному виду.

Это подпредставление имеет одно изображение и кнопку.

Когдачтобы освободить их?

Мой код здесь,

 customAlertView=[[UIView alloc] initWithFrame:CGRectMake(0, 0, 600, 600)];


         UIImageView *imgv=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"celebration.png"]];

          UIButton *btnOK=[UIButton buttonWithType:UIButtonTypeCustom];

         [btnOK setTitle:@"OK" forState:UIControlStateNormal];
         [btnOK addTarget:self action:@selector(alertOKClicked) forControlEvents:UIControlEventTouchUpInside];

         [customAlertView addSubview:btnOK];
         [customAlertView addSubview:imgv];
         [self.view addSubview:customAlertView];

         [imgv release];
         [btnOK release];



In one another method I am writing the code.

  [customAlertView removeFromSuperview];

Моя путаница заключается в просмотре изображения и есть кнопка Если

  1. я освобождаю здесь просмотрБудет ли он автоматически выпустить свои подпредставления.Если да, то нет проблем.
  2. Если НЕТ, как его выпустить

    , как я это сделал, сразу же после добавления подпредставлений освободил объекты.Это приведет к тому, что моя кнопка ОК недостойна.И не повлияет на нажатие кнопки.

    Итак, при удалении из суперпредставления я должен написать.

[выпуск [customalertview subviews]];

Ответы [ 3 ]

2 голосов
/ 02 апреля 2012

Я думаю, что очки, которые вы упускаете, основываясь на ваших комментариях к существующим ответам, следующие:

  • Представление сохраняет свои подпредставления - поэтому, если вы создаете новый объект представления и добавляете его в качестве подпредставления к чему-то другому, вы можете затем безопасно выпустить его, если только вы не захотите сохранить ссылку на него самостоятельно.
  • Когда представление удаляется из его суперпредставления, оно освобождается. Так что, если больше нет объектов, сохраняющих его, он будет освобожден.
  • Когда представление освобождается, оно автоматически освобождает все свои подпредставления и т. Д. Вниз по дереву.

Включите ARC, как только сможете.

2 голосов
/ 02 апреля 2012

Ваш код правильный.

Вы отпускаете их после добавления их в представление предупреждений, так как представление предупреждений заботится о их сохранении. Когда вы звоните removeFromSuperview, он автоматически освобождается.

1 голос
/ 02 апреля 2012

Вы делаете это правильно. Customalertview автоматически выпускает свои подпредставления.

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

Пока вы поддерживаете свой собственный alertView в своем представлении, у вас есть объект, сохраняющий ваши вещи, поэтому счетчик выпусков не будет равен 0, пока вы не удалите customAlertView, потому что вы добавили их в customAlertView и когда вы удалили предупреждение предупреждение будет сброшено, и все вещи, которые он хранит, также будут освобождены.

Надеюсь, это поможет вам понять, как все работает.

Если вы хотите узнать больше об управлении памятью, вы можете взглянуть на документацию Apple здесь

EDIT:

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

Если вы не понимаете управление памятью, вы также можете взглянуть на: http://cocoadevcentral.com/d/learn_objectivec/ раздел 7

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