我很难找出pushViewController是否保留了控制器,目前我有以下代码(有效)...
ColorController *colorController = [[ColorController alloc] initWithNibName:nibColor bundle:nil];
[[self navigationController] pushViewController:colorController animated:YES];
[colorController release];
但我正在考虑删除发布并添加自动释放...
ColorController *colorController = [[[ColorController alloc] initWithNibName:nibColor bundle:nil] autorelease];
[[self navigationController] pushViewController:colorController animated:YES];
非常感激
加里
这什么都不做......
ColorController *colorController = [[ColorController alloc] initWithNibName:nibColor bundle:nil];
[[[self navigationController] pushViewController:colorController animated:YES] autorelease];
你是自动释放pushViewController的返回值:animated:,这是无效的。
您的第一个代码段有效且正确无误。 pushViewController:确实保留了被推送的控制器。
编辑:在更新的代码中,两个样本之间几乎没有差异。两者都保持适当的保留计数但是,除非必要,否则避免使用autoRelease是一种“最佳做法”(特别是在内存敏感区域,如iPhone)。这有助于您的应用程序维护更可预测和可管理的内存占用。
是的,视图控制器被保留。
你发布的两个代码块之间没有太大的区别(至少我正在看的版本 - 其他人可能看到一个错误的调用的早期版本 autorelease
)。你可以使用任何一个。这是一种风格问题。
确实如此。无论何时将一个对象提供给另一个这样的SDK对象,它都会被保留。虽然第二行不是自动释放你的想法。通常你想要的 autorelease
与...在同一条线上 init
为了清楚起见。
ColorController *colorController = [[[ColorController alloc] initWithNibName:nibColor bundle:nil] autorelease];
[[self navigationController] pushViewController:colorController animated:YES];
如果想尝试,你应该试试这个
id temp = [self.navigationController.viewControllers objectAtIndex:1];
[self.navigationController popToViewController:temp animated:YES];
您将被导航到堆栈中可用的任何其他先前的ViewController。