Subview UIButton нужно выпустить? - PullRequest
1 голос
/ 23 марта 2011

Впервые задаю вопрос здесь.

У меня есть вопрос, у меня есть UIImageView, добавленное как подпредставление к моему UIButton, которое объявлено с использованием buttonWithType: (что означает, что яМне нужно отпустить кнопку, верно?) Но мне все равно нужно отпустить подпредставление моих UIButton?

Кодовых битов:

UIImage *circleImage = [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @"item-circle" ofType: @"png"]];
UIImageView *circleImageView = [[[UIImageView alloc] initWithImage: circleImage] autorelease];
[imageView setFrame: CGRectMake(-5, -5, 65, 65)];

UIButton *button = [UIButton buttonWithType: UIButtonTypeCustom];
[button addSubview: circleImageView];

Ответы [ 2 ]

0 голосов
/ 23 марта 2011

Как правило, все, что вы alloc или retain, должно быть освобождено. Но вы делаете это здесь (по сути), вызывая autorelease. Если вы спрашиваете, нужно ли вам снова выпустить подпредставление, ответ - нет.

То же самое относится и к вашей кнопке. Вы не звонили alloc или retain (вместо этого вы использовали buttonWithType), поэтому вам не нужно звонить release.

0 голосов
/ 23 марта 2011

Краткий ответ:

Ваш код выглядит нормально.Основное правило заключается в том, что для каждого alloc, new, retain или copy требуется release или autorelease.


LongОтвет:

Давайте посмотрим на ваш код построчно.

UIImage *circleImage = [UIImage imageWithContentsOfFile: [[NSBundle mainBundle]  pathForResource: @"item-circle" ofType: @"png"]];

В этой первой строке используется удобный метод.вам не нужно вызывать release ни для чего, так как вы не звонили alloc, new, retain или copy.

UIImageView *circleImageView = [[[UIImageView alloc] initWithImage: circleImage] autorelease];

Во второй строке вы вызываетеalloc, но затем вы звоните autoerelease, так что вам там хорошо.

[imageView setFrame: CGRectMake(-5, -5, 65, 65)];

Опять нет alloc, new, retain или copy.

UIButton *button = [UIButton buttonWithType: UIButtonTypeCustom];

Еще раз, вы использовали удобный метод.

[button addSubview: circleImageView];

Вы еще не звонили alloc, new, retain или copy.Поэтому вы не звоните release или autorelease.

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