Ios 实例化控件的标识符:是创建VC的副本,还是神奇地不创建脚本
作为一名“年轻的iOS学徒”,我有以下愚蠢的问题要问- 在Xcode 5中,我创建了with(包含导航控制器,它正在管理3个其他视图控制器)和以下代码: 我的问题是:因为上面的代码中使用了Ios 实例化控件的标识符:是创建VC的副本,还是神奇地不创建脚本,ios,iphone,uiviewcontroller,uistoryboard,Ios,Iphone,Uiviewcontroller,Uistoryboard,作为一名“年轻的iOS学徒”,我有以下愚蠢的问题要问- 在Xcode 5中,我创建了with(包含导航控制器,它正在管理3个其他视图控制器)和以下代码: 我的问题是:因为上面的代码中使用了self.window.rootViewController,这意味着应用程序已经加载了Main.storyboard文件,并且其中的VCs“冻结”已经实例化,对吗 这是否意味着,当我调用时,会创建每个VC的第二个副本 当我稍后在我的应用程序源代码中设置/更改VC的属性时,脚本管理的VC不会受到影响(但仍然显
self.window.rootViewController
,这意味着应用程序已经加载了Main.storyboard文件,并且其中的VCs“冻结”已经实例化,对吗
这是否意味着,当我调用时,会创建每个VC的第二个副本
当我稍后在我的应用程序源代码中设置/更改VC的属性时,脚本管理的VC不会受到影响(但仍然显示给用户)
应用程序已加载Main.storyboard文件
对
当我调用InstanceViewControllerWithiIdentifier时,就会创建每个VC的第二个副本
是,如果视图控制器位于根导航控制器内,则为否(因为应用程序还没有理由加载它们)。因此,主视图控制器为是,用户视图控制器为否
以后在VC上设置/更改属性
这取决于代码
故事板是一个容器,用你的话来说,“冻结”(真正存档)视图控制器和视图。您的代码不会更改情节提要内容,它只是在不同的时间根据不同的触发器加载归档文件的不同部分。一旦从情节提要存档中创建了这些元素,您就可以对其进行修改,但这是基于代码的运行时修改。只需补充一点,即在didFinishLaunching中加载情节提要本身不会重复加载。在这个方法中,要么是自动加载,要么是代码。不过,额外的实例化是不必要的/
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc1 = [storyboard instantiateViewControllerWithIdentifier:@"Master"];
//UIViewController *vc2 = [storyboard instantiateViewControllerWithIdentifier:@"Login"];
UIViewController *vc3 = [storyboard instantiateViewControllerWithIdentifier:@"User"];
User *user = [User load];
NSArray *controllers = (user ? @[vc1, vc3] : @[vc1]);
UINavigationController *nc = (UINavigationController *)self.window.rootViewController;
[nc setViewControllers:controllers];
return YES;
}