instantiateViewControllerWithIdentifier 和 initWithNibName 之间的区别?
Difference between instantiateViewControllerWithIdentifier and initWithNibName?
instantiateViewControllerWithIdentifier 和 initWithNibName 有什么区别,除了前者来自故事板而后者不是?
UIStoryboard *signupStory = [UIStoryboard storyboardWithName:@"SignupStory" bundle:[NSBundle mainBundle]];
SignupLoginViewController *signUpVC = [signupStory instantiateViewControllerWithIdentifier:@"SignupVC"];
和
SignupLoginViewController *signUpVC = [[SignupLoginViewController alloc] initWithNibName:@"SignupLoginViewController" bundle:[NSBundle mainBundle]];
如果您使用情节提要创建了 UI,则需要调用 instantiateViewControllerWithIdentifier
。在这里,标识符不是视图控制器本身的一部分,而只是故事板使用它来定位视图控制器。故事板将处理初始化并最终调用 initWithCoder
,这就是为什么在创建子 classed 视图控制器时需要覆盖它。
另一方面,如果您的 UI 驻留在纯 .xib 文件中 - 开发人员通常使用 initWithNibName
。从技术上讲,它确实会破坏封装,还有其他方法可以做到这一点,但您会看到它最常使用,因为它是 class.
的指定初始化程序
instantiateViewControllerWithIdentifier 和 initWithNibName 有什么区别,除了前者来自故事板而后者不是?
UIStoryboard *signupStory = [UIStoryboard storyboardWithName:@"SignupStory" bundle:[NSBundle mainBundle]];
SignupLoginViewController *signUpVC = [signupStory instantiateViewControllerWithIdentifier:@"SignupVC"];
和
SignupLoginViewController *signUpVC = [[SignupLoginViewController alloc] initWithNibName:@"SignupLoginViewController" bundle:[NSBundle mainBundle]];
如果您使用情节提要创建了 UI,则需要调用 instantiateViewControllerWithIdentifier
。在这里,标识符不是视图控制器本身的一部分,而只是故事板使用它来定位视图控制器。故事板将处理初始化并最终调用 initWithCoder
,这就是为什么在创建子 classed 视图控制器时需要覆盖它。
另一方面,如果您的 UI 驻留在纯 .xib 文件中 - 开发人员通常使用 initWithNibName
。从技术上讲,它确实会破坏封装,还有其他方法可以做到这一点,但您会看到它最常使用,因为它是 class.