objective-c - UIViewController pushViewController View Controller 的高保留计数

标签 objective-c ios uinavigationcontroller pushviewcontroller retaincount

我写了下面这段代码:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

GameViewController *gameViewController = [[GameViewController alloc]initWithLevelNumber:([levelGroup intValue]*100+indexPath.row) Bonus:NO];

NSLog(@"Retain Counter =%d",gameViewController.retainCount);

[navController pushViewController:gameViewController animated:YES];
[gameViewController release];

NSLog(@"Retain Counter=%d",gameViewController.retainCount);

[tableView deselectRowAtIndexPath:indexPath animated:YES];
}

两次日志的结果依次为16! 这怎么可能?我只调用一次 alloc 方法,然后在将 Controller 压入堆栈后释放 .. alloc-> +1,push-> +1,release-> -1 = 1 或否?

我希望 View Controller 在我从堆栈中弹出时被释放。

最佳答案

请阅读此注释以明确此问题。它是 NSObject 协议(protocol)引用的一部分:

重要提示:此方法通常对调试内存管理问题毫无值(value)。因为任意数量的框架对象可能已经保留了一个对象以保存对它的引用,同时自动释放池可能持有任意数量的延迟释放对象,您不太可能从此方法获得有用的信息

NSObject Protocol Reference. RetainCount discussion

关于objective-c - UIViewController pushViewController View Controller 的高保留计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9554996/

相关文章:

ios - UIScrollView 自定义分页

ios - UITableViewController 上是否可以有 'sticky' 页脚?

ios - 简单标题未显示在 UINavigationController 中

iphone - 将 subview 添加到窗口后无法推送模态视图?

ios - 在过渡期间使 UINavigationBar 透明动画

ios - 另一个 VC 中的 VC 没有按下按钮(移动到 XCode8 后)

ios - IOS 9远程通知中的滑动按钮 - 当应用程序在后台而不是在应用程序内存不足时工作

objective-c - 如何根据从扫描仪接收的数据创建图像

ios - NSUndoManager 错误为 "unrecognized selector sent to instance"

ios - 移动版 Safari : inertia scrolling on body AND minimal UI behavior?