3D Peek和Pop内存泄漏

时间:2017-02-16 12:52:19

标签: ios objective-c uitableview memory-leaks 3dtouch

执行peek和pop后,我发现一个问题是注册视图进行预览的控制器在取消分配视图后不会释放视图。
我创建了一个带有tableView的简单项目,viewController将每个单元格注册为预览,如下所示:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    PeekCell *cell = [tableView dequeueReusableCellWithIdentifier:kPeekCellIdentifier forIndexPath:indexPath];
    [self registerForPreviewingWithDelegate:self sourceView:cell];

    return cell;
}

问题是如果我向上和向下滚动,因为将释放单元格并创建新单元格。 viewController将注册新单元格进行预览,并以此方式增加内存 问:我做错了什么?我何时应该致电unregisterForPreviewingWithContext

2 个答案:

答案 0 :(得分:0)

不要在previewing中注册cellForRowAtIndexPath:,而是尝试:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
    self.previewingContext = [self registerForPreviewingWithDelegate:self sourceView:cell];
} 

- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath*)indexPath{
    [self unregisterForPreviewingWithContext:self.previewingContext];
}

答案 1 :(得分:0)

您可以在单元格中定义UIViewControllerPreviewing,而不是在@ystack注释中建议的数组解决方案 在CellClass内部:

    if cell.viewControllerPreviewing != nil {
        unregisterForPreviewing(withContext: cell.viewControllerPreviewing!)
    }

    cell.viewControllerPreviewing = self.regist3DTouch(cell:cell)

在tableView或CollectionView内部 行单元格

func regist3DTouch(cell:UIView)->UIViewControllerPreviewing?{
    if traitCollection.forceTouchCapability == UIForceTouchCapability.available {
        return registerForPreviewing(with: self, sourceView: (cell))
    }else{
        print("UIForceTouchCapability is not available")
        return nil
    }
}

这是regist3DTouch方法

class Address(object):
  def __init__(self,RealEstate_Adress=None, RealEstate_Zip_Code=None):
    self.RealEstate_Adress = RealEstate_Adress
    self.RealEstate_Zip_Code = RealEstate_Zip_Code

class Webads( object):
  def __init__(self, type=None, titre=None):
    self.Type = type
    self.Title = titre
    self.Adress = Address()

希望这会有所帮助