ios - 3D Peek and Pop 内存泄漏

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

在实现 peek 和 pop 之后,我看到一个问题,即注册 View 以供预览的 Controller 在 View 被释放后不会释放 View 。
我创建了一个带有 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

最佳答案

不要在 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];
}

关于ios - 3D Peek and Pop 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42274523/

相关文章:

ios - In App Purchase 不会将其状态更改为 SKPaymentTransactionStatePurchased

ios - JSONValue 不解析 JSON 响应

ios - 我们可以在 iOS 中将数据从 plist 设置到 Keychain 吗?

ios - UITableViewCell 子类 : in what delegate method is it appropriate to do changes to the cells layer?

objective-c - 裁剪 UIImage

ios - 触摸 searchBar 时未调用 updateSearchResults 函数

iphone - 如何一一禁用 UITableViewCell 选择?

ios - 根据检索到的数据类型创建自定义单元格

ios - 双引号内的 Bash 单引号

ios - 当我尝试从字典中删除值时,它抛出错误 "Index out of range"