gpt4 book ai didi

iphone - 何时应该使用 initWithNibName 初始化 View Controller ?

转载 作者:IT老高 更新时间:2023-10-28 11:36:05 26 4
gpt4 key购买 nike

在创建 View Controller 时,我应该什么时候使用 init:,什么时候应该使用 initWithNibName:bundle:

最佳答案

-initWithNibName:bundle: 是 UIViewController 的指定初始化器。最终应该叫它。也就是说,尽管 Apple 的示例(在许多情况下倾向于简洁而不是可维护性),但绝不应该从 View Controller 本身之外调用它。

你会经常看到这样的代码:

MYViewController *vc = [[MYViewController alloc] initWithNibName:@"Myview" bundle:nil];

我说这是不正确的。它将实现细节(NIB 的名称和甚至使用 NIB 的事实)放入调用者。这打破了封装。正确的做法是:

MYViewController *vc = [[MYViewController alloc] init];

然后,在 MYViewController 中:

- (instancetype)init
{
self = [super initWithNibName:@"Myview" bundle:nil];
if (self != nil)
{
// Further initialization if needed
}
return self;
}

- (instancetype)initWithNibName:(NSString *)nibName bundle:(NSBundle *)bundle
{
NSAssert(NO, @"Initialize with -init");
return nil;
}

这会将关键实现细节移回对象中,并防止调用者意外破坏封装。现在,如果您更改 NIB 的名称,或转向程序化构造,则将其修复在一个地方(在 View Controller 中),而不是在使用 View Controller 的每个地方。

关于iphone - 何时应该使用 initWithNibName 初始化 View Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2224077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com