Objective-C中的最大递归深度
Objective-C的最大递归深度限制是什么?它几乎肯定取决于堆栈的大小。Objective-C或大多数语言中没有预设的最大递归深度 此外,在一个简单的测试中,你递归并计算错误发生的次数,但这也不能给你一个真实的答案,它可能会高估你在实际程序中所能达到的深度 只要堆栈上有足够的空间容纳正在调用的方法/函数的框架,就可以继续调用。帧包括各种内务管理信息(通常为固定大小)、保存寄存器(可变大小)和方法/函数的局部变量(可变大小)-因此没有单个帧大小 如果您想要一个粗略的近似值,您可以使用代码中出现的局部变量的平均数量和类型声明一个函数,并计算您可以递归调用它的次数。这将为您运行的机器提供近似值Objective-C中的最大递归深度,objective-c,recursion,Objective C,Recursion,Objective-C的最大递归深度限制是什么?它几乎肯定取决于堆栈的大小。Objective-C或大多数语言中没有预设的最大递归深度 此外,在一个简单的测试中,你递归并计算错误发生的次数,但这也不能给你一个真实的答案,它可能会高估你在实际程序中所能达到的深度 只要堆栈上有足够的空间容纳正在调用的方法/函数的框架,就可以继续调用。帧包括各种内务管理信息(通常为固定大小)、保存寄存器(可变大小)和方法/函数的局部变量(可变大小)-因此没有单个帧大小 如果您想要一个粗略的近似值,您可以使用代码中出现
MacOSX本身对堆栈大小施加了一个上限,您可以使用
ulimit-s
为内核找到这个上限。另请参见此是。我得到了一个异常…对不起,不是异常,而是一个EXC_BAD_access。当然,你有堆栈溢出。诀窍是保持递归级别的运行计数,并在每次递归调用函数时记录它。崩溃前的最后一个NSLog是您的答案。我不会记录它,只是等到它崩溃,然后询问调试器。通过日志记录,它应该在几分钟内崩溃,而不是几秒钟。