-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
/* Setup your scene here */
我的基本问题是 1.)该方法在何处得到大小? 我知道它假设是"屏幕的大小"因为它可能是iPhone或iPad。 2.)执行self = [super initWithSize:size]时发生了什么? 为什么超级调用initWithSize?是对该方法的递归调用? 并且超级喜欢称自己?有什么不同 ?
对不起我的noob问题,但没有人真正解释说他们通常会说你不需要知道它,或者假设你知道它。我买了一本书并观看了视频。
答案 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。