在返回当前函数

时间:2016-01-20 20:07:59

标签: objective-c function scope stack heap

这是一般编程问题。我使用的是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]

0 个答案:

没有答案