【发布时间】:2013-02-23 17:08:47
【问题描述】:
我有一个基于视图的 NSTableView,它使用 NSViewController 子类 (InspectorViewController) 的视图:
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
// Get inspector view controller
InspectorViewController *inspectorViewController = [_inspectorViewControllers objectAtIndex:row];
// Return its view
return inspectorViewController.view;
}
除了 NSViewController 的视图在我移除视图控制器(释放良好)时永远不会释放之外,一切都很好。
如果我改用此代码:
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
// Get inspector view controller
InspectorViewController *inspectorViewController = [_inspectorViewControllers objectAtIndex:row];
// Return its view
NSTableCellView *view = [[NSTableCellView alloc] init] autorelease];
[view addSubview:inspectorViewController.view];
return view;
}
当我移除视图控制器时视图被正确释放。 这是删除视图控制器的代码:
- (void)inspectorViewControllerClosed:(InspectorViewController *)inspectorViewController {
// Get index of inspector view controller
NSUInteger index = [_inspectorViewControllers indexOfObject:inspectorViewController];
// Remove inspector view controller in array
[_inspectorViewControllers removeObject:inspectorViewController];
// Create index set
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:index];
// Begin updates
[_tableView beginUpdates];
// Move row in table view
[_tableView removeRowsAtIndexes:indexSet withAnimation:NSTableViewAnimationEffectFade];
// End updates
[_tableView endUpdates];
}
我尝试用一个小示例代码重现问题,我也遇到了同样的问题,只有当我不直接返回视图控制器的视图时,视图控制器的视图才会被释放。
有人可以帮帮我吗?
【问题讨论】:
标签: macos cocoa memory-leaks nstableview nsviewcontroller