Objective-C:无故改变int值

标签 objective-c memory pointers int

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/

相关文章:

c# - 了解 .NET 应用程序内存大小

caching - 程序的大小如何会增加缓存未命中率?

C++,将非指针类型分配给模板类的成员指针

c++ - 在 C++ 中如何返回指向数组的指针?

ios - 如何从 Assets 中获取正确方向的图像

ios - 在 iOS 中调整图像大小 — 无法诊断的泄漏

python - Python:无法复制内存使用情况的测试

javascript - 在 Xcode 中收到引用错误,指出 undefined object 。

ios - 按下按钮时显示和隐藏动画图像

java - java openCL 指针不能指向空对象