Почему Instruments сообщает о пользовательском коде UITableViewCell как об утечке памяти? - PullRequest
0 голосов
/ 21 сентября 2009

Я все еще пытаюсь найти способ управления памятью для iPhone SDK, и я не уверен, почему Instruments сообщает об определенном блоке кода как об утечке памяти. Я следовал инструкциям для этих частей кода, поэтому я не совсем уверен, что я делаю неправильно.

Нарушающий блок кода:

DreamTableCell *cell = (DreamTableCell *)[tableView dequeueReusableCellWithIdentifier:cellID];
if ( cell == nil )
    cell = [[[DreamTableCell alloc] initWithFrame:CGRectZero reuseIdentifier:cellID] autorelease];

Кроме того, существует специальный метод DreamTableCell, в который загружается NIB-файл UITableViewCell, насколько я знаю, ничего необычного:

- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier {
    NSArray *objs = [[NSBundle mainBundle] loadNibNamed:@"DreamTableCell" owner:nil options:nil];
    for ( id item in objs )
        if ( [item isKindOfClass:[DreamTableCell class]] ) {
            self = item;
            break;
        }
    return self;
}

Что вызывает утечку памяти - чего мне не хватает?

1 Ответ

3 голосов
/ 21 сентября 2009

Это строка:

self = item;

Вы устанавливаете self для новой переменной экземпляра, и, поскольку вы находитесь в init, был создан существующий экземпляр. Вам нужно выпустить совершенно новое «я», прежде чем устанавливать его на что-то другое:

[self release];
self = item;
...