奇怪的错误 - 对象变为零

时间:2015-11-24 14:06:01

标签: ios objective-c

我正在尝试使用递归函数来确定网格中最大可能的值组合。我的一个功能是非常奇怪,给我一个错误:

warning: could not load any Objective-C class information. This will significantly reduce the quality of type information available.

我的功能代码如下:

-(int)pattern4XBottomAtTile:(Tile *)t1 TileTwo: (Tile *) t2{
//base case
if(t1.x == t2.x && t1.y == t2.y){
    return t2.value;
}
//move 1
if((t1.y < 4) && (t1.y == t2.y) && (abs(t2.x-t1.x) == 2)){
    return t1.value + [self pattern4XBottomAtTile:t1.bottom TileTwo:t2];
}

//move 2
if((t1.x-t2.x == 2)&&(t1.y - t2.y > 0) ){
    return t1.value + [self pattern4XBottomAtTile:t1.left TileTwo:t2];
}
if((t1.x-t2.x == -2)&&(t1.y - t2.y > 0) ){
    return t1.value + [self pattern4XBottomAtTile:t1.right TileTwo:t2];
}

//move 3
if((abs(t2.y-t1.y) == 1)&&(abs(t2.x-t1.x) == 1)){
    return t1.value + [self pattern4XBottomAtTile:t1.top TileTwo:t2];
}

//move 4
if((t1.y == t2.y)&&(t1.x-t2.x == 1)){
    return t1.value + [self pattern4XBottomAtTile:t1.left TileTwo:t2];
}
if((t1.y == t2.y)&&(t1.x-t2.x == -1)){
    return t1.value + [self pattern4XBottomAtTile:t1.right TileTwo:t2];
}
return 0;

}

到目前为止,我通过使用多个断点找到的问题是,对象被传递给函数,并且稍后会变为零。

方法开头的断点显示:

enter image description here enter image description here

然而,当我运行该函数时,我遇到了错误: enter image description here enter image description here

在我的屏幕左侧,有一些可能相关的信息。 enter image description here

t2和t1的值在#4处开始为nil,并且在#5处t1变为nil。 直到大约40264,这些值才会再次改变,其中t1更改为图块的地址,然后在40265处再次更改。

我对我的问题所处的位置感到非常困惑。我的递归代码是从我朋友提供的工作java函数转换而来的,所以我对这一切都有些失落。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

如果你有那么多堆栈帧,你可能用完了堆栈空间(也就是内存)。你需要一个更好的算法,或者你有一个错误,并且递归时不会终止。