UITableViewCell删除和保存单元格时泄漏

时间:2015-08-11 13:07:27

标签: objective-c iphone uitableview cocoa-touch memory-management

我注意到我的一个自定义UITableViewCell正在泄漏。它不会在执行编辑时被释放,删除底部单元格并点击保存。这是我表中的顶级单元格(我称之为添加单元格)。一旦我的表格视图处于编辑模式,就会显示添加单元格,其中所有其他单元格显示在下面,并且删除模式已打开。现在,在执行删除操作并保存数据后,即使我的表视图上的dealloc被调用,Add Cell仍然会挂起。

我正在附加我的代码和乐器截图(我从截图中删除了第一行(Malloc调用)。对我来说,iOS内部处理似乎有问题。请指教。

new URL(null, "http://...", new sun.net.www.protocol.http.Handler());

点击“保存”按钮后调用的代码:

- (UITableViewCell *)tableView:(UITableView *)iTableView cellForRowAtIndexPath:(NSIndexPath *)iIndexPath {
    MyTableViewCell *aCell = nil;
    NSString *aCellType;

    if (iIndexPath.row == 0 && self.inEditMode) {
        aCellType = kMyAddCell;
        aCell = (MyAddCell *)[iTableView dequeueReusableCellWithIdentifier:aCellType];

        if (!aCell) {
            aCell = [[MyAddCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:aCellType];
        }

        aCell.isGroupedView = YES;
        aCell.delegate = self;
        aCell.textLabel.text = @“Add More";
        self.tableView.allowsSelectionDuringEditing = YES;
    } else {
        aCellType = kMyDefaultCell;
        aCell = (MyTableViewCell *)[iTableView dequeueReusableCellWithIdentifier:aCellType];

        if (!aCell) {
            aCell = [[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:aCellType];
        }

        NSInteger anIndex = iIndexPath.row;

        if (self.inEditMode) {
            anIndex = anIndex - 1;
        }

        aCell.textLabel.text = @“Name";
        aCell.selectionStyle = UITableViewCellSelectionStyleNone;
    }

    return aCell;
}


- (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView editingStyleForRowAtIndexPath:(NSIndexPath *)iIndexPath {
    return (iIndexPath.row == 0 && self.inEditMode) ? UITableViewCellEditingStyleNone : UITableViewCellEditingStyleDelete;
}


- (BOOL)tableView:(UITableView *)iTableView canEditRowAtIndexPath:(NSIndexPath *)iIndexPath {
    return YES;
}


- (void)tableView:(UITableView *)iTableView commitEditingStyle:(UITableViewCellEditingStyle)iEditingStyle forRowAtIndexPath:(NSIndexPath *)iIndexPath {
    if (iEditingStyle == UITableViewCellEditingStyleDelete) {
    [self setSaveModeNavigationBar];
        [self.tableView beginUpdates];
        [self.enabledUsers removeObjectAtIndex:(self.inEditMode) ? iIndexPath.row - 1 : iIndexPath.row];
        [self.tableView deleteRowsAtIndexPaths:@[iIndexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
        [self.tableView endUpdates];
    }
}


- (void)setEditing:(BOOL)iEditing animated:(BOOL)iAnimated {
    [super setEditing:iEditing animated:iAnimated];
    [self.navigationItem setHidesBackButton:YES animated:NO];

    self.headerViewLabel.text = @“Edit Me";

    UIBarButtonItem *aDoneButton = [[UIBarButtonItem alloc] initWithTitle:@“Done"
                                                                    style:UIBarButtonItemStylePlain
                                                                   target:self
                                                                   action:@selector(cancelEditing)];
    [self.navigationItem setRightBarButtonItem:aDoneButton];
    [self.navigationItem setLeftBarButtonItem:nil animated:YES];
    self.inEditMode = YES;
    [self.tableView reloadData];
}

工具分配堆栈:

enter image description here

1 个答案:

答案 0 :(得分:0)

显然,事实证明这是this thread中被跟踪的已知问题。在iPhone 5S(iOS 8)中尝试了相同的步骤,问题已在那里得到解决。