当我实现这样的方法时:
-(void)exampleMethod{
[self exampleMethod];
}
然后运行它,我得到EXE_BAD_ACCESS (code=2, address=0x7fff5f3ffff8)
。
当我在方法中调用方法或函数时,它会在崩溃之前调用自己更长的时间。
以下是一个例子:
-(void)exampleMethod{
NSLog(@"Example Was Run");
[self exampleMethod];
}
运行时会出现什么逻辑导致此行为?
答案 0 :(得分:5)
它会在任何一种方式上自我调用。这是一个无限递归,它在像Objective-C这样的语言中最终会导致你耗尽堆栈空间并崩溃。不同之处在于带有print语句的版本要慢得多(因为与调用函数相比,打印速度非常慢),因此在打击堆栈之前需要花费更长的时间。 (也就是说,通过挂钟测量需要更多的时间,而不是它将获得更多的迭代。每次迭代都比较慢,因此需要更长的时间才能达到杀死程序的迭代次数。)