Objective-c初始化程序创建两个不同的对象而不是一个

时间:2014-08-06 01:56:05

标签: objective-c init initializer

我有一个奇怪的错误,我似乎无法弄明白。我有一个名为SPGamePlayScene的课程。我还有一个名为SPPracticeScene的类,继承自SPGamePlayScene。我希望SPPracticeScene能够完成SPGamePlayScene在其初始化程序中所做的所有工作,因此我重写了它并添加了一些其他代码。但是,无论何时初始化SPPracticeScene对象,它都会创建两个而不是一个。我认为它必须与我的初始化器有关。下面是SPGamePlaySCene的初始化程序:

//SPGamePlayScene.m
- (id)initWithSize:(CGSize)size colored:(BOOL)colored {

    if (self = [super initWithSize:size]) {

        //lots of custom setup here

    }
    return self;


}

对我来说,它看起来像一个非常标准的初始化程序。

然后下面是SPPracticeScene的初始化程序。它调用上面的超类(SPGamePlayScene)初始化方法,然后进行一些自定义设置

//SPPracticeScene
- (id)initWithSize:(CGSize)size {

    if (self = [super initWithSize:size colored:NO]) {

        //custom setup here
        //this log runs twice. the memory adress shown is different each time
        NSLog(@"practice scene: %p", self);
    }
    return self;

}

任何人都可以告诉我为什么它会运行两次并且正在创建两个不同的对象?

1 个答案:

答案 0 :(得分:0)

好吧,我最初是在viewController的viewDidLayout子视图中创建场景。我将它移动到viewWillAppear并且不再被调用两次。由于某种原因,viewDidLayoutsubviews被调用两次。我的视图控制器中嵌入了导航控制器,可能与多次调用的原因有关