我写了下面这段代码:
-(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];
}
两次日志的结果依次为1和6! 这怎么可能?我只调用一次 alloc 方法,然后在将 Controller 压入堆栈后释放 .. alloc-> +1,push-> +1,release-> -1 = 1 或否?
我希望 View Controller 在我从堆栈中弹出时被释放。
最佳答案
请阅读此注释以明确此问题。它是 NSObject 协议(protocol)引用的一部分:
重要提示:此方法通常对调试内存管理问题毫无值(value)。因为任意数量的框架对象可能已经保留了一个对象以保存对它的引用,同时自动释放池可能持有任意数量的延迟释放对象,您不太可能从此方法获得有用的信息。
关于objective-c - UIViewController pushViewController View Controller 的高保留计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9554996/