Objective-C:我需要帮助来保留 int 的值。没有我的命令,它就在我身上发生变化。
最初的问题是:“你如何声明和保留一个 int?”,这里的另一篇文章对此很满意:Objective-C: How do you declare and retain an int?
现在我遇到一个问题,原来是 18 的 int 以某种方式自行更改为 2。
这是我的代码:
@interface Game : Layer // this is from cocos2d
{
int maxSprites;
}
@implementation Game
-(void)initVariables
{
maxSprites = 18;
}
稍后,当我打印出来时,就像
NSLog(@" maxSprites = %d ", maxSprites);
我得到:
maxSprites = 2
而要求它为 18 的操作会崩溃或不起作用,就好像它现在真的只有 2 一样。
这怎么可能? =)
Apple + Shift + F 没有显示 maxSprites
变量的其他用法。
我看过其他代码示例,它们通常使用 getter 和 setter 公开变量,并且它们还使用 @property
。我错过了什么吗?我是 Objective-C 的新手,所以我还是刚开始!
我做了一个 Apple + Shift + F for maxSprites"In Project, Textual, Contains, Ignore Case 结果只有:
Game.h: int maxSprites;
Game.m: maxSprites = 18;
Game.m: NSLog(@" maxSprites = %d", maxSprites);
Game.m: NSLog(@" maxSprites = %d", maxSprites);
Game.m: NSLog(@"maxSprites is at %p", &maxSprites);
Game.m: NSLog(@"maxSprites is at %p", &maxSprites);
Game.m: NSLog(@" maxSprites = %d", maxSprites);
Game.m: NSLog(@" maxSprites = %d", maxSprites);
Game.m: NSLog(@"maxSprites is at %p", &maxSprites);
Game.m: NSLog(@"maxSprites is at %p", &maxSprites);
我使用观察点找到了它发生变化的位置。它改变了
Expression: “*(int *) 67379960”
New Value: 2
Old Value: 18
在这一行:
[self checkMatchBarAward:spriteTypeToAdd];
奇怪?该函数对 maxSprites
没有任何作用,那一行也没有。
编辑: 这是函数,我把它里面的所有东西都注释掉了,它仍然出现: .h
-(void)checkMatchBarAward:(int)spriteTypeToAdd;
.m
-(void)checkMatchBarAward:(int)spriteTypeToAdd
{
}
编辑:
感谢您的建议。我已经清理了所有目标,但它仍然改变了值(value)。由于你们给出的答案,你们把我带到了这个问题上。感谢您的所有帮助。
我在下面的答案中发布了我的结果。这是一个副本:
伙计们,你们不会相信这是什么原因。感谢您的所有帮助,因为告诉我清理、查看和检查我的类型,这很有帮助。
我查看了我的数组。我找到了一个这样声明的:
int matchBarArray[8];
2 从断点停止开始,它表示值从 18 变为 2,我有这一行:
matchBarArray[spritesCaptured-1] = spriteTypeToAdd;
你猜怎么着,我超出了数组的边界 1。如果我将数组的大小增加到 9,我将不再得到 int 从 18 到 2 的变化。
此外,如果我越界超过 1,也就是说,我将数组大小减小到更小,还有其他的东西开始改变,比如我的分数、 bool 值、整个游戏! =)
我不敢相信在 Objective-C 中访问数组外的内存会导致这样的骚乱 =) 而且很难调试!
最佳答案
伙计们/姑娘们,你们不会相信这是什么原因。感谢您的所有帮助,因为告诉我清理、查看和检查我的类型,这很有帮助。
我查看了我的数组。我找到了一个这样声明的:
int matchBarArray[8];
2 从断点停止开始,它表示值从 18 变为 2,我有这一行:
matchBarArray[spritesCaptured-1] = spriteTypeToAdd;
你猜怎么着,我超出了数组的边界 1。如果我将数组的大小增加到 9,我将不再得到 int 从 18 到 2 的变化。
此外,如果我越界超过 1,也就是说,我将数组大小减小到更小,还有其他的东西开始改变,比如我的分数、 bool 值、整个游戏! =)
我不敢相信在 Objective-C 中访问数组外的内存会导致这样的骚乱 =) 而且很难调试!
关于Objective-C:无故改变int值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1941686/