Cocoa-Touch: управление памятью - PullRequest
       17

Cocoa-Touch: управление памятью

0 голосов
/ 08 октября 2009

Я настраиваю строки UIPickerView, поэтому я реализую метод viewForRow в его делегате следующим образом:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
    if (view) {
        return view;
    } else {
        NSString *s = [datePickerValues objectAtIndex:row];

        UILabel *l = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 44)];
        l.text = s;
        l.font = [UIFont boldSystemFontOfSize:18];
        l.textAlignment = UITextAlignmentCenter;
        l.backgroundColor = [UIColor purpleColor];

        [l autorelease];
        return l;
    }    
}

Я новичок в Obj-C.

Поскольку я aloc / initing l, я должен также выпустить его в соответствии с руководством по управлению памятью. Однако мне нужно также вернуть его. Авто-релиз это нормально?

Ответы [ 2 ]

10 голосов
/ 08 октября 2009

Да, авто-релиз здесь точно.

3 голосов
/ 08 октября 2009

Я думаю, что соглашение состоит в том, чтобы автоматически выпустить его в операторе alloc:

UILabel *l = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 44)] autorelease];

Поскольку объект должен существовать после выхода из метода, у вас нет другого выбора, кроме как использовать авторелиз. Как правило, в вызывающем методе необходимо убедиться, что вы сохранили копию, иначе она может быть передана вам случайным образом. В этом случае pickerView сделает это за вас, так что не беспокойтесь.

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