0

Почему у меня есть утечка памяти при включенной ARC (выделена жирным шрифтом)?Утечка памяти сотовой ячейки с включенным ARC

У меня есть CustomCell.m

+(CustomCell*)cell 
{ 


    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
     NSArray *nib =[[NSBundle mainBundle] loadNibNamed:@"CustomCell_iPhone" owner:self options:nil];   
     return [nib objectAtIndex:0]; 

    } else { 
     NSArray *nib =[[NSBundle mainBundle] loadNibNamed:@"CustomCell_iPad" owner:self options:nil];   **//leaking 100%** 
     return [nib objectAtIndex:0]; 

    } 
} 

В моей Tableview conteroller:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    cell=[CustomCell cell]; **// 100% leaking** 
... 
} 

ответ

1

Таким образом, две вещи. Один из них, я понимаю, вы создаете эту ячейку в файле .xib. Установите идентификатор повторного использования в ячейке в IB. Затем, вместо этого метода класса CustomCell, выгрузить перо в Tableview: cellForRowAtIndexPath :, как это:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    // Assuming you set a reuse identifier "cellId" in the nib for your table view cell... 
    MyCell *cell = (MyCell *)[tableView dequeueReusableCellWithIdentifier:@"cellId"]; 
    if (!cell) { 
     // If you didn't get a valid cell reference back, unload a cell from the nib 
     NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"MyCell" owner:nil options:nil]; 
     for (id obj in nibArray) { 
      if ([obj isMemberOfClass:[MyCell class]]) { 
       // Assign cell to obj, and add a target action for the checkmark 
       cell = (MyCell *)obj; 
       break; 
      } 
     } 
    } 

    return cell; 
} 

Вторая вещь в том, что, пытаясь многоразовый из очереди клетки первых, вы получите гораздо гораздо лучшую производительность.