#objective-c #cocoa-touch #ipad #memory-leaks
#objective-c #cocoa-touch #iPad #утечки памяти
Вопрос:
Коллеги-разработчики,
Я пытаюсь установить веб-изображение в качестве фона для UIButton. Все работает, за исключением того, что когда я создаю и анализирую, это показывает, что у aImage все еще есть ссылка 1. Добавление релиза для aImage после addSubview не решает проблему. Я думаю, что мог бы решить эту проблему, создав подкласс и написав пользовательский dealloc, но это похоже на запутанное решение. У кого-нибудь есть какие-либо предложения? Спасибо!
UIImage *aImage = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:mUrl]];
[myOverviewButton setBackgroundImage:aImage forState:UIControlStateNormal];
[aView addSubview:myOverviewButton];
Ответ №1:
либо добавьте авторелиз в aImage, либо вызовите release для него вручную.
UIImage *aImage = [[[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:mUrl]] autorelease];
Когда вы вызываете setBackgroundImage:, кнопка выполняет сохранение изображения. Когда вы выполняли alloc / init, вы сохраняли файл, который так и не был выпущен.
Ответ №2:
Как только показанный вами код завершит выполнение, количество ссылок aImage
должно быть равно 2: одна из alloc
вызова и одна из setBackgroundImage:forState:
call. Вы должны выпустить после, setBackgroundImage:forState:
чтобы сбалансировать alloc
, но у вас все равно будет количество ссылок, равное 1. Это ожидаемо — в противном случае myOverviewButton
не было бы изображения для работы. При myOverviewButton
освобождении значение должно уменьшиться до 0.