#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) и посмотреть, сообщает ли он об утечке. Если это так, вы можете расширить информацию об утечке и увидеть основную причину.