iphone - это утечка? - PullRequest
       1

iphone - это утечка?

0 голосов
/ 02 августа 2010

Это то, чего я не понимаю. Посмотрите на этот метод (скопировано с http://blog.blackwhale.at/2009/07/uibutton-in-uitableview-footer/)

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

или будет течь? Я видел образцы кода Apple с подобными вещами, поэтому я предполагаю, что объект где-то выпускается ... но где?

// custom view for footer. will be adjusted to default or specified footer height
// Notice: this will work only for one section within the table view
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {

    if(footerView == nil) {
        //allocate the view if it doesn't exist yet
        footerView  = [[UIView alloc] init];

        //we would like to show a gloosy red button, so get the image first
        UIImage *image = [[UIImage imageNamed:@"button_red.png"]
  stretchableImageWithLeftCapWidth:8 topCapHeight:8];

        //create the button
        UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        [button setBackgroundImage:image forState:UIControlStateNormal];

        //the button should be as big as a table view cell
        [button setFrame:CGRectMake(10, 3, 300, 44)];

        //set title, font size and font color
        [button setTitle:@"Remove" forState:UIControlStateNormal];
        [button.titleLabel setFont:[UIFont boldSystemFontOfSize:20]];
        [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

        //set action of the button
        [button addTarget:self action:@selector(removeAction:)
                        forControlEvents:UIControlEventTouchUpInside];

        //add the button to the view
        [footerView addSubview:button];
    }

    //return the view for the footer
    return footerView;
}

спасибо.

Ответы [ 2 ]

2 голосов
/ 02 августа 2010

Поскольку footerView является переменной экземпляра для этого класса, этот код является правильным. footerView не выпускается автоматически (вами, во всяком случае), поэтому он будет существовать до тех пор, пока вы его не release (потому что вы «владеете» / сохраняете его, выделяя его). Правильное место для этого было бы в методе dealloc этого класса.

Пока вы делаете это, этот код выглядит для меня правильным. :)

1 голос
/ 02 августа 2010

footerView является переменной экземпляра.Это выпущено в сделке класса?

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