2014-10-01 20 views
0

这是教科书中的代码,尽管我理解作者试图完成的主旨,但我不理解代码背后的逻辑?一个解释将是最值得赞赏的。有人可以解释如何重写init方法吗?我正在尝试使用边整数值初始化方形对象。我只是不知道如何?

-(instancetype)initWithSide:(int)s 
{ 
self = [super init]; 
if (self){ 
[self setSide: s]; 
} 
return self; 
} 

为什么“self = [super init];”当我们“回归自我”时,我们将返回什么?它是存储在“s”或对象上的整数值吗?

回答

0

首先,您的init方法调用[super init]。这将运行你的超类的初始化。如果你从NSObject继承,超类没有什么可做的,但对于像UIViewController这样更复杂的超类,它可能需要做大量的工作。

然后,您将[super init]的结果分配到self并检查self != nil。如果你的超类无法初始化实例,它可以返回nil,然后你将它传递给你的调用者。

一旦你的超类初始化了实例并且你知道它成功了,你可以做你自己的初始化。

最后,您将self返回给您的调用者。如果self设置为nil,则调用者可以检测到您(或您的超类)未能初始化。如果你返回非nil,你的调用者知道它有一个有效的对象。

+0

所以当我们回归自我时,我们又回来了什么? – Andrew 2014-10-03 02:58:53

+0

您正在返回刚刚初始化的对象,如果无法初始化,则返回nil。 – 2014-10-03 03:36:01

相关问题