在实现 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/