Ser*_*nce 0 iphone cocoa-touch design-patterns uiviewcontroller ios
我问这个问题,因为看起来viewDidLoad在初始化程序的主块之前被调用,而我在初始化程序中初始化的类变量在viewDidLoad中变为nil.作为参考,我正在以编程方式执行整个viewcontroller,并且我已经创建了一个自定义初始化程序,因此我可以接受在viewcontroller中使用的各种参数.我的自定义初始化程序当然调用UIViewControllers指定的初始化程序.
基本上,我很好奇将参数发送到UIViewController的正确设计模式是什么?我已经阅读了有关此问题的其他帖子,并没有真正得到明确的答案.我应该跳过初始化程序并手动设置属性(从类外部)?这看起来很简陋,我真的想发送一些参数,我很好奇别人怎么做这个?
在初始化完成之前调用viewDidLoad的原因可能是因为您在初始化程序中调用了view方法.例如:
- (id)init
{
if ((self = [super init])) {
_thing = 123;
_other = self.view.frame.size.width / 2;
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
viewDidLoad在视图加载时调用.一旦调用view方法,视图就会加载(或者如果您愿意,还可以访问视图属性).所以你应该避免在init中引用视图.
要回答你的问题,我更喜欢为我的视图控制器创建一个init方法.
- (id)initWithThing:(MyThing *)thing thang:(MyThang *)thang
{
if ((self = [super init])) {
_thing = [thing retain];
_thang = [thang retain];
// ...
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
您还可以在启动后使用属性设置额外变量.我个人更喜欢仅使用可选属性执行此操作,并在init方法中放置必需的属性.这样我就无法使用无效状态初始化视图控制器.