Управление памятью с помощью UIButton - PullRequest
0 голосов
/ 01 августа 2011

У меня были некоторые проблемы с пониманием управления памятью. Я добавляю изображения и кнопки в основной вид, используя цикл. Изображения отпускаются правильно, но не кнопки.

Мой вопрос сводится к тому, учитывая следующий код, почему, когда я нажимаю кнопку, чтобы очистить экран, память не освобождается? UIButton автоматически высвобождается из пользовательского UIButtonType, и setImage autoreleases транспортная карта.

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIButton *homeButton = [UIButton buttonWithType:UIButtonTypeCustom];

    [homeButton setFrame:[UIScreen mainScreen].bounds];
    [homeButton setBackgroundColor:[UIColor blueColor]];
    [homeButton setImage:[UIImage imageNamed:@"TransportationMap.png"] forState:UIControlStateNormal];
    homeButton.tag = 9399;
    [homeButton addTarget:self action:@selector(clearScreen) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:homeButton];
}

-(void)clearScreen 
{    
    for (UIView *view in [self.view subviews]) {
        [view removeFromSuperview];
    }
}

Ответы [ 2 ]

1 голос
/ 01 августа 2011

Вы обеспокоены тем, что вам не нужно их размещать ... Правила Apple по управлению памятью гласят, что все, что у вас есть (все, что вы выделили, скопировали или сохранили), вы несете ответственность за освобождение. Кроме того, вы, как правило, не должны заботиться о том, что происходит. Apple может кэшировать изображения для своих собственных целей и т. Д.… Ответственность за решение этой проблемы лежит на вашей, а не на вашей. В вашем коде вы соблюдаете все правила (насколько я могу судить) ... вы не выделяете и не сохраняете кнопку или изображение. Поэтому вам не следует беспокоиться об освобождении или освобождении этой памяти. Позвольте структуре справиться с этим.

1 голос
/ 01 августа 2011

Мне кажется, что вы не выделяете никакой памяти ни в одном из этого кода, поэтому вам не нужно ничего освобождать.

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