请在MyScence.m中解释Apple的sprite kit示例方法

时间:2014-05-22 20:53:20

标签: ios sprite-kit

-(id)initWithSize:(CGSize)size {
   if (self = [super initWithSize:size]) {
        /* Setup your scene here */

我的基本问题是 1.)该方法在何处得到大小?   我知道它假设是"屏幕的大小"因为它可能是iPhone或iPad。 2.)执行self = [super initWithSize:size]时发生了什么?     为什么超级调用initWithSize?是对该方法的递归调用?      并且超级喜欢称自己?有什么不同 ?

对不起我的noob问题,但没有人真正解释说他们通常会说你不需要知道它,或者假设你知道它。我买了一本书并观看了视频。

2 个答案:

答案 0 :(得分:2)

在示例中,它是从ViewController.m

调用的
SKScene * scene = [MyScene sceneWithSize:skView.bounds.size];

super并不像打电话给self。如果ClassB扩展ClassA并且两个类都实现了方法X,则[super X]引用ClassA中的实现,即使它被{覆盖了{ {1}}

在这种情况下,ClassB扩展MyScene。因此,在SKScene的{​​{1}}实现中,调用initWithSize将确保MyScene中的实现也被调用(因此它可以初始化它需要的任何内容)。如果没有它(即你被称为[super initWithSize:])那么它会绕圈并调用自己直到堆栈已满并且你得到一个异常。

基于这些问题,我强烈建议您从一些简单的例子开始。

答案 1 :(得分:1)

大小将由方法的调用者输入......例如

Blah * myBlah = [[Blah alloc] initWithSize:CGSizeMake(20.0f, 20.0f)];

调用super方法意味着此类继承自另一个类(See Object Oriented Programming),并且此初始化程序的实现需要首先初始化父类(或超类)。

编辑:此时可能应该声明,您在Objective C中创建的几乎所有类都将成为系统类的子类,例如: NSObject或UIView。