最近我加入了两个Xcode项目。为了让这个东西工作,我不得不分配并初始化我的视图控制器。
self.myViewController = [[MyViewController alloc] init];
但为什么呢?在另一个项目中,我有相同的代码。唯一的区别是不同视图的层次结构。我在顶部添加了一个新视图(开头)。所以调用View Controller不再是堆栈上的第一个视图了。
我在堆栈上以这种方式推动我的观点:
[[self navigationController] pushViewController:myViewController animated:YES];
在我的NIB中,我添加了一个带有IB的View Controller对象并连接了Outlets。
我也有记忆管理问题:如果我有像myViewController这样的属性,我是否必须释放它? “正常”释放在dealloc方法中完成。但是由于alloc,我是否必须使用额外的版本?我不这么认为,但无论如何我都会问你。
答案 0 :(得分:0)
我发现了:在IB中,我必须在我的视图控制器对象上设置nib名称。那么分配和初始化是由IB完成的吗?
答案 1 :(得分:0)
我需要查看更多代码来回答为什么必须分配视图控制器,但我会说你总是手动分配它们(至少根据我的经验)。
至于内存管理问题,如果你的属性被声明为retain
属性(@property(retain) UIViewController *myViewController
),你确实泄漏了内存,因为alloc之后的retain计数将为1,之后由你的访问者完成的保留将是2.因此,如果你只发布一次,你最终会泄漏。
我通常会这样做:
self.myViewController = [[[MyViewController alloc] init] autorelease];
答案 2 :(得分:0)
还有一个选择:
(IBAction)loginButton:(UIButton *)sender {
NSLog(@"pressed login");
ICMasterViewController *controller = [[self storyboard] instantiateViewControllerWithIdentifier:@"mainnav"];
[self presentViewController:controller animated:YES completion:nil];
}
在您的情节提要上,您必须UIViewController
名称为mainnav