何时分配和初始化视图控制器
问题描述:
最近我加入了两个Xcode项目。为了让这个东西起作用,我必须分配并初始化我的视图控制器。何时分配和初始化视图控制器
self.myViewController = [[MyViewController alloc] init];
但是为什么?在另一个项目中,我拥有相同的代码。唯一的区别是不同视图的层次结构。我在顶部添加了一个新视图(开始)。因此,调用View Controller不再是堆栈中的第一个视图。
我推着以这种方式在栈上我的看法:
[[self navigationController] pushViewController:myViewController animated:YES];
在我的发钞银行我已经加入IB视图控制器对象和连接奥特莱斯。
而且我有一个内存管理问题太:如果我有像myViewController属性,我必须释放它吗? “正常”版本是在dealloc方法中完成的。但是,我必须使用额外的版本吗?我不这么认为,但我仍然问你。
答
我需要看到更多的代码来回答为什么你必须分配你的视图控制器,但我会说你总是手动分配它们(至少在我的经验)。
至于内存管理问题,如果你的属性被声明为retain
属性(@property(retain) UIViewController *myViewController
),你确实在泄漏内存,因为alloc后的保留数为1,并且在你的访问器完成保留之后因此,如果你只释放一次,你最终会泄漏。
我经常这样做,而不是:
self.myViewController = [[[MyViewController alloc] init] autorelease];
答
我发现它:在IB我不得不在我的视图控制器对象上设置笔尖名称。那么分配和初始化是由IB完成的?
答
还有一个选项:
(IBAction)loginButton:(UIButton *)sender {
NSLog(@"pressed login");
ICMasterViewController *controller = [[self storyboard] instantiateViewControllerWithIdentifier:@"mainnav"];
[self presentViewController:controller animated:YES completion:nil];
}
在你的故事板,你必须有UIViewController
与名mainnav
谢谢您的回答!没有任何代码在后面。我完全用IB来完成它,因为我对使用arrayWithObject感到困惑:viewControllers/pushViewController/addSubView/initWithNibName ...所以要么释放它两次,要么使用autorelease? – testing 2010-09-07 15:27:54