Пользовательский код ячейки, показывающий утечки в iPhone

#iphone #objective-c

#iPhone #objective-c

Вопрос:

это может быть простой вопрос, но я не могу найти решение.Я создаю пользовательскую ячейку для табличного представления.Когда я тестирую приложение, instruments показывает утечки в коде, используемом для создания пользовательской ячейки.Я не понимаю, где я должен выпустить материал для устранения утечек.Кто-нибудь может помочь мне в этом. Это код, который я использовал для создания пользовательской ячейки.

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellID= @"Parcustom";
    Parcustom *cell = (Parcustom *)[tableView dequeueReusableCellWithIdentifier:cellID];

    if(cell==nil)
    {


        NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"Parcustom" owner:nil options:nil];

        for(id currentObject in nibObjects)
        {
            if([currentObject isKindOfClass: [Parcustom class]])
            {
                cell = (Parcustom *)currentObject;
            }

        }
    }    // Configure the cell...
        cell.f1.text=[datedisplay objectAtIndex:indexPath.row];




           cell.f2.text=[tips objectAtIndex:[[indexx objectAtIndex:indexPath.row]intValue]];
                  cell.selectionStyle=UITableViewCellSelectionStyleGray;             
    return cell;

}
  

Инструмент сообщает об утечке в строке NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@»Parcustom» владелец: nil параметры: nil];
Как я могу устранить эту утечку.Кто-нибудь может мне помочь, пожалуйста.

Ответ №1:

Замените приведенный ниже код на блок if

 NSArray *nibObjects = [[NSArray alloc] initWithArray:[[NSBundle mainBundle] loadNibNamed:@"Parcustom" owner:nil options:nil]];

    for(id currentObject in nibObjects)
    {
        if([currentObject isKindOfClass: [Parcustom class]])
        {
            cell = (Parcustom *)currentObject;
        }

    }
    [nibObjects release];
  

Комментарии:

1. спасибо за вашу руку. но иногда он все еще показывает утечки. могу ли я сделать nibobjects=nil; а затем отпустить его

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

3. Спасибо за отличный help.no я не выпускал две метки, созданные для пользовательской ячейки, и, выпустив это, решил проблему

Ответ №2:

Кажется, в представленном коде нет утечки. Я полагаю, что фактическая утечка где-то в Parcustom классе. Возможно, вы не выпускаете какой-либо ivar в Parcustom ‘s dealloc . Может f1 быть, или f2 .

Ответ №3:

Я не вижу утечки в вашем коде — попробуйте запустить статический анализатор («Анализ» в меню XCode) и посмотреть, сообщает ли он об утечке. Если это так, вы можете расширить информацию об утечке и увидеть основную причину.