这是一般编程问题。我使用的是Objective-C,但可以使用任何其他语言。
我有以下功能:
-(BOOL)shouldMoveToColumn:(NSInteger)column_ andRow:(NSInteger)row_ {
if (![super shouldMoveToColumn:column_ andRow:row_]) {
state_ = kSBEEnemyState_Moving;
[self prepareForMoving];
[self handle];
return NO;
}
// otherwise ...
// some other calculations ....
return YES;
}
在返回NO之前调用[self handle]
会导致执行再次调用-(BOOL)shouldMoveToColumn:column_ andRow:row_
的操作。
我问自己这是否意味着在返回函数之前调用[self handle]
时函数可能永远不会被关闭,从而导致“堆栈溢出”,因为我们继续移动堆而不关闭然后回去。
所以我想如果在另一个线程上调用[self handle]
以确保该函数将返回并关闭该函数会更好!?
我不确定这是否是正确的行为,但是根据我对函数,堆,堆栈和返回的理解,这就是发生的事情。
编辑:
我刚读到互联网上的递归调用,偶然发现了一篇名为“无限递归”的维基百科文章。对它的描述可以看作是我的问题答案的重要部分:
无限递归
堆栈溢出的最常见原因是过深或无限 递归,其中函数调用自身的次数是多次 存储与之相关的变量和信息所需的空间 每个调用都可以放在堆栈上。
链接:https://en.wikipedia.org/wiki/Stack_overflow#Very_deep_recursion
这正是我期待发生的事情。虽然到目前为止运行我的代码时从未发生这种情况 - 即使很长一段时间。但我很确定最好在另一个帖子上调用[self handle]
。