Пользовательская утечка памяти ячейки с включенной ARC - PullRequest
0 голосов
/ 29 марта 2012

Почему у меня происходит утечка памяти с включенным 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];

    }
}

В моей таблице указатель:

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

1 Ответ

1 голос
/ 04 апреля 2012

Итак, две вещи.Во-первых, я понимаю, вы создаете эту ячейку в файле .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;
}

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

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