instantiateViewControllerWithIdentifier 和 initWithNibName 之间的区别?

Difference between instantiateViewControllerWithIdentifier and initWithNibName?

instantiateViewControllerWithIdentifierinitWithNibName 有什么区别,除了前者来自故事板而后者不是?

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.

的指定初始化程序