在Cocoa中,什么时候是视图控制器实例化?

时间:2012-02-09 22:51:02

标签: objective-c cocoa

我正在使用Xcode 4.2在Mac OS X 10.7上构建Cocoa应用程序。在其中,我的UI有一个控制器,ViewController,我想在其中实例化一个模型类的实例,例如执行主逻辑的模型。到目前为止,我写道:

@implementation ViewController // originally wrote Model, should be ViewController, apologies! My mistake/original post!
-(id)init {
    if (self = [super init]) {
        model = [[Model alloc] init];
    }
return self;
}
@end

此代码有效吗?我也看过使用-(void)awakeFromNib:方法的例子,虽然我不完全确定这个方法的作用。这是实例化模型对象的更好位置吗?

编辑:对不起!上面的实现应该是@implementation ViewController!非常感谢那些指出这个错误的人!此代码是否有效或应该使用awakeFromNib

2 个答案:

答案 0 :(得分:2)

看起来它会在分配和无限链模型对象时无限递归(因为-[Model init]正在调用-[Model init])。

答案 1 :(得分:0)

在你的代码中,你将[super init],也就是超类的对象分配给self(子类)。之后,它可能会导致像未定义选择器这样的问题。当您分配/读取对象(子类)属性或调用超类中不存在的方法时,就会发生这种情况。