Как выпустить фоновое изображение UIButton? - PullRequest
0 голосов
/ 02 мая 2011

Может кто-нибудь сказать мне, как выпустить изображение, которое используется в качестве фонового изображения в UIButton.Я создал кнопку Custom, используя следующий код, но я не смог освободить память UIImage, для которой установлено фоновое изображение в UIButton.Вот код, который я использовал для создания UIButton

`

   for (int index=0;index<10; index++)

   {            
    UIImage *image=[[UIImage alloc] initWithData:imageData];


    CGRect frame = CGRectMake(xValue, 10, 50, 50);  
    UIButton *button = [[UIButton alloc] initWithFrame:frame];

    [button addTarget:self action:@selector(onClickImgButton:)forControlEvents:UIControlEventTouchUpInside];
    [button setTag:index];      
    [button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];     
    [button setImage:image forState:UIControlStateNormal];                      
    [button.layer setCornerRadius:10.0f];
    [button.layer setMasksToBounds:YES];
    [button.layer setBorderWidth:3.0f];
    [button.layer setBorderColor:[[UIColor lightGrayColor] CGColor]];

    image=nil;
    [image release];


    [horizontalScrollView addSubview:button];
    button=nil; 
    [button release];


    xValue=xValue+60;
    cx +=60;
}

`

Ответы [ 2 ]

2 голосов
/ 02 мая 2011

Во-первых, вы смешали Изображение = ноль; [релиз изображения];

порядок, вы должны сначала освободить, а затем установить указатель на ноль. Прямо сейчас вы отправляете «release» на ноль, и ничего не происходит. Вы делаете то же самое для кнопки между прочим.

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

[button setImage:nil forState:UIControlStateNormal];

Следует установить счетчик хранения равным 0 и в конечном итоге освободить изображение

1 голос
/ 02 мая 2011

Выше вы отправляете сообщение release на nil.В общем случае обратное, то есть

[image release];
image = nil;

Аналогичная ошибка была допущена здесь .

Однако, поскольку экземпляр UIButton есть (согласно быстрому взгляду наUIButton.h) сохраняя изображение, это ошибка image = nil, т. Е. Просто

[image release];

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

Например, представьте, что происходит, когда приходит время освободить ваш экземпляр UIButton.Как он будет отправлять release вашему изображению, которое он сохранял, когда вы давно установили для своего изображения значение nil?Кнопка обнаруживает, что сохраняет нулевое изображение.Она столкнется с той же проблемой, что и вы сами: отправка release на ноль!

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