什么阻止方法调用自己?

时间:2014-05-21 17:17:10

标签: objective-c recursion

当我实现这样的方法时:

-(void)exampleMethod{
    [self exampleMethod];
}

然后运行它,我得到EXE_BAD_ACCESS (code=2, address=0x7fff5f3ffff8)

当我在方法中调用方法或函数时,它会在崩溃之前调用自己更长的时间。

以下是一个例子:

-(void)exampleMethod{
    NSLog(@"Example Was Run");
    [self exampleMethod];
}

运行时会出现什么逻辑导致此行为?

1 个答案:

答案 0 :(得分:5)

它会在任何一种方式上自我调用。这是一个无限递归,它在像Objective-C这样的语言中最终会导致你耗尽堆栈空间并崩溃。不同之处在于带有print语句的版本要慢得多(因为与调用函数相比,打印速度非常慢),因此在打击堆栈之前需要花费更长的时间。 (也就是说,通过挂钟测量需要更多的时间,而不是它将获得更多的迭代。每次迭代都比较慢,因此需要更长的时间才能达到杀死程序的迭代次数。)