Проблема с памятью после освобождения объекта - PullRequest
0 голосов
/ 19 октября 2011
NSArray *imageExtension  = [info.ThemeImage componentsSeparatedByString:@"."];
NSString *path = [[NSBundle mainBundle] pathForResource:[imageExtension objectAtIndex:0]ofType:@"png"];
UIImage *image = [[UIImage alloc]initWithContentsOfFile:path];
image=[image addImageReflection:0.50];

[CarouselView  setFrame:CGRectMake(0,-200, image.size.width, image.size.height)];

UIButton *button = [[UIButton alloc]init];
[button setFrame:CGRectMake(0,0, image.size.width, image.size.height)];

[button setBackgroundImage:image forState:UIControlStateNormal];
[image release]; 

После освобождения изображения объекта у меня все еще есть утечка памяти ...

Я не имею ни малейшего представления, почему он показывает утечку памяти при утечке инструментов

Ответы [ 4 ]

3 голосов
/ 19 октября 2011

Существует три проблемы с кодом выше, которые могут вызвать утечку памяти.

Сначала вы создаете image здесь:

UIImage *image = [[UIImage alloc]initWithContentsOfFile:path];

Затем вы назначаете этот указатель imageк чему-то еще, теряя тем самым исходную ссылку:

image=[image addImageReflection:0.50];

addImageReflection Я полагаю, дает вам автоматически выпущенный объект.

Несмотря на это, вы позже выпускаете image:

[image release]; 

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

Наконец, у вас есть третья проблема.Созданный вами объект button никогда не освобождается:

UIButton *button = [[UIButton alloc]init];
1 голос
/ 19 октября 2011

ты не отпустил кнопку?Если приведенный выше код находится в функции и он вызывался много раз, кнопка утечки будет утечка.попробуйте добавить

[button release];
0 голосов
/ 19 октября 2011

Здесь вы выделяете новый UIImage

UIImage *image = [[UIImage alloc]initWithContentsOfFile:path];

Здесь вы выполняете какое-то действие (отражение?) Над изображением, и, вероятно, эта функция возвращает автоматически выпущенный экземпляр .. Здесь вы переназначаете этот экземпляр своему оригиналу.Переменная экземпляра. Вы потеряете ссылку на исходный экземпляр изображения, и она будет утечка. Кроме того, у вас есть ссылка на автоматически выпущенный экземпляр

image=[image addImageReflection:0.50];

, который вы ошибочно попытаетесь выпустить позже, что приведет кавария ..

[image release];
0 голосов
/ 19 октября 2011

Это то же самое после тебя?

[[self view] addSubview:button];
[button release];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...