Выпуск UIImageView и все еще получение утечки памяти - PullRequest
1 голос
/ 29 марта 2011

Я искал все возможное, прежде чем опубликовать здесьниже приведен код, который вызывает утечку памяти.Включение авто-релиза исправляет утечку памяти, но мне больше интересно узнать, что я здесь делаю не так.Если я им владею, я должен выпустить его, что я и пытаюсь сделать :) Спасибо за помощь заранее.ContainerView - это UIView, и я добавляю в него текст приветствия.

UIImageView *welcomeText = [[UIImageView alloc] init];
welcomeText = [[UIImageView alloc] initWithFrame:CGRectZero];
welcomeText.frame = (CGRect) {  CGRectGetMidX(containerView.frame) -295 , 100.0, 590,134 };
welcomeText.autoresizingMask =  UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | 
        UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth;
welcomeText.image = [UIImage imageNamed:@"welcome-to-the-jungle.png"];
[containerView addSubview:welcomeText];
[welcomeText release];

Ответы [ 2 ]

5 голосов
/ 29 марта 2011
UIImageView *welcomeText = [[UIImageView alloc] init];
welcomeText = [[UIImageView alloc] initWithFrame:CGRectZero];

После того, как во второй строке ранее выделенный текст welcomeText потерян, и вы теряете эту память. После 1-й строки открывается представление изображения, и welcomeText указывает на это. Во 2-й строке выделено другое изображение, и теперь welcomeText указывает на это новое изображение. Таким образом, у вас нет указателя на 1-й вид выделенного изображения и, как следствие, утечка.

Здесь вам на самом деле не нужна 1-я строка.

UIImageView *welcomeText = [[UIImageView alloc] initWithFrame:CGRectZero];
0 голосов
/ 29 марта 2011

Вы не должны размещать объект UIImageView в первой строке. Во второй строке объект, выделенный в первой строке, протекает.

...