我正在使用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
?
答案 0 :(得分:2)
看起来它会在分配和无限链模型对象时无限递归(因为-[Model init]
正在调用-[Model init]
)。
答案 1 :(得分:0)
在你的代码中,你将[super init],也就是超类的对象分配给self(子类)。之后,它可能会导致像未定义选择器这样的问题。当您分配/读取对象(子类)属性或调用超类中不存在的方法时,就会发生这种情况。