Должен ли я разместить заявление о выпуске индикатора активности в dealloc? - PullRequest
0 голосов
/ 10 июля 2011

У меня довольно простой вопрос. В следующем фрагменте кода лучше поместить индикатор активности в Deloc, так как я запускаю и останавливаю индикатор активности после его добавления в подпредставление?

- (void)viewDidLoad {
    [super viewDidLoad];
    // add activity indicator
    activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    activityIndicator.center = CGPointMake(self.view.bounds.size.width / 2.0f, self.view.bounds.size.height / 2.0f);

    activityIndicator.hidesWhenStopped = YES;
    [self.view addSubview:activityIndicator];
    [activityIndicator release];      // SHOULD THIS BE PLACED IN DEALLOC?

    [self loadFax];
}

Ответы [ 3 ]

2 голосов
/ 10 июля 2011

На самом деле, я бы поместил релиз в viewDidUnload, кроме dealloc.

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

Имейте в виду, что, согласно комментарию ниже, освобождение в viewDidUnload не означает, что вы можете пропустить освобождение в dealloc. Это по двум причинам: если вы используете iOS 2.x нет viewDidUnload; более того, когда ваш контроллер представления будет выпущен нормально, viewDidUnload не будет вызываться. Таким образом, предложение выполняется в обоих местах, и не забудьте установить значение ivar на ноль после выполнения этого.

В этом случае было бы лучше выпустить, как вы делаете, но тогда, по крайней мере, установите значение ivar равным nil, в противном случае вы могли бы думать, что вы все еще владеете объектом.

Если вы использовали свойство retain и сделали назначение следующим образом:

  Self.activityIndicator = ....

Это было бы не так, тем не менее, я думаю, что освобождение в viewDidUnload того, что вы создали в viewDidLoad, является лучшей практикой в ​​целом.

Здесь какие документы о viewDidUnload.

1 голос
/ 10 июля 2011

Я бы выпустил его так, как он используется, создавая новый каждый раз, когда мне это нужно. Таким образом, у вас нет выделенного фрагмента памяти, сидящего без дела. Сделайте себя делегатом индикатора и отпустите его, когда он закончится.

1 голос
/ 10 июля 2011

Да, если вы планируете использовать ActivityIndicator во время вашего просмотра в случайное время, dealloc будет хорошим местом для этого.

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