Objective-c初始值设定项创建两个不同的对象,而不是一个

Objective-c初始值设定项创建两个不同的对象,而不是一个,objective-c,init,initializer,Objective C,Init,Initializer,我有一只奇怪的虫子,我似乎弄不懂。我有一门课叫spgameplaysecene。我还有一个名为SPPracticeScene的类,继承自spgameplaysecene。我想让SPPracticeScene做SPGamePlaySecene在其初始值设定项中所做的所有事情,所以我覆盖了它并向它添加了一些其他代码。但是,每当我初始化SPPracticeScene对象时,它都会创建两个而不是一个。我想这一定和我的起名人有关。以下是SPGamePlaySecene的初始值设定项: //SPGamePl

我有一只奇怪的虫子,我似乎弄不懂。我有一门课叫spgameplaysecene。我还有一个名为SPPracticeScene的类,继承自spgameplaysecene。我想让SPPracticeScene做SPGamePlaySecene在其初始值设定项中所做的所有事情,所以我覆盖了它并向它添加了一些其他代码。但是,每当我初始化SPPracticeScene对象时,它都会创建两个而不是一个。我想这一定和我的起名人有关。以下是SPGamePlaySecene的初始值设定项:

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

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

        //lots of custom setup here

    }
    return self;


}
在我看来,这是一个相当标准的初始值设定项

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

//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;

}

有人能告诉我为什么它运行了两次并且创建了两个不同的对象吗?

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

请显示更多代码。您发布的代码片段似乎没有显示问题。您所说的“它创建了两个而不是一个”是什么意思?什么症状告诉您??我在练习场景的init方法中添加了一条NSLog语句。它输出两次,每次输出的内存地址都不相同。了解如何使用断点调试程序如果调用了两次
[SPPracticeScene-initWithSize:
,则可能调用了两次。在
NSLog
所在的位置设置断点。然后查看堆栈跟踪,查看每次是谁调用它。无论如何,问题不在你发布的代码中。