2015-05-27 57 views
2

这是执行self = [super init]的通用init模式;它应该分配自我指针在init中调用init,在self = [super init]之前调用

但我可以像这样转发init吗?

- (id)initWithObject:(id)object { 
    return [self initWithObject:object scrollTo:nil]; 
} 

代码工作,但不知道这是否是犹太...还怎么能没有自我工作= [超级初始化]

另外的移动,这样行吗?

- (id)initWithObject:(id)object { 
    self = [self initWithObject:object scrollTo:nil]; // NOT super 
    if (self) { 
     //... 
    } 
    return self; 
} 
+0

100%合法。当我有多个重载的构造函数时,我经常这样做。 – Shai

+6

是的,但是您应该真正开始使用'instancetype'而不是'id'。 – picciano

回答

1

是的,这很好。我自己做了几次没有问题,我在Apple documentation中找到了一个代码示例(向下滚动到“多个初始化器和指定的初始化程序”)。

+0

但是如何可以访问自指针,为什么我们这样做呢?self = [super init] –

+0

'self'已经被定义了,因为你已经调用了'[Class alloc]'。 – Glorfindel

+0

那么为什么约定然后自我= [超级初始化...] –

0

是的,当然可以!请注意,initWithObject:scrollTo必须返回一个有效的自我对象。

1

只有在返回操作符中调用指定的初始化程序或初始化程序时,它才是绝对合法的。确保调用指定初始化程序的一种或另一种方式。

相关问题