【问题标题】:Cocos2d/iOS: can't understand how to interpet a pointer addressCocos2d/iOS:无法理解如何解释指针地址
【发布时间】:2013-01-02 21:18:40
【问题描述】:

我有一个包含 200 个子弹(CCSprite 的子类)的 NSMutableArray,创建如下:

capacity=200;
bullets = [[NSMutableArray alloc] initWithCapacity:capacity];

// Create a number of bullets up front and re-use them whenever necessary.
for (int i = 0; i < capacity; i++)
{
    Bullet* bullet = [Bullet bulletWithScreenRect:screenRect];
    bullet.visible = NO;
    bullet.bulletId=i;
    [bullets addObject:bullet];
    [self addChild:bullet]; 
}

我创建了一个 for 循环来迭代它们,并添加了一个断点来查看地址是否相同。

for (int i = 0; i < capacity; i++)
{
    Bullet* bullet = [bullets objectAtIndex:i];
    CCLOG(@"%i %i", i, bullet.bulletId);
}

结果是指针“bullet”对于所有 200 个项目符号 (0x1336c8a0) 始终指向内存中的相同地址。我在项目符号 (int:bulletId) 中添加了一个属性来尝试识别它们是否是不同的对象,但看起来确实如此。 我不明白为什么指针总是指向同一个地址(它是指同一个地址吗?还是只是指针内存地址?)。

这里是我从Bullet* 指针获得0x1336c8a0 地址的地方:

【问题讨论】:

    标签: ios pointers memory cocos2d-iphone


    【解决方案1】:

    我会查看 Bullet 类的 bulletWithScreenRect 方法。我假设这是一个工厂方法,但也许它只是返回相同的静态对象。您可以自己分配和初始化 Bullet 对象,然后我假设有一种方法可以单独设置屏幕矩形。

    换句话说,改变:

      Bullet* bullet = [Bullet bulletWithScreenRect:screenRect];
    

    这样的:

      Bullet* bullet = [[Bullet alloc] init];
      bullet.screenRect = screenRect;  // Not sure if this setter is present.
    

    至少,为了进行健全性检查,您可以更改 Bullet 类的构造函数,以确保创建单独的实例。就像我说的,检查 bulletWithScreenRect 方法的内容,看看它到底在做什么。这对我来说似乎是罪魁祸首。

    【讨论】:

      【解决方案2】:

      这意味着您的数组中只有一个Bullet 实例。在这种情况下,您的问题肯定出在您的 bulletWithScreenRect 方法中,该方法返回一个缓存实例而不是一个新实例。

      您在调试器中看到的地址是指针指向的地址,而不是指针的地址,这或多或少是无用的。由于指针指向的地址总是相同的,很明显我们在谈论同一个对象。

      要测试我刚才所说的内容,您可以打印地址并将其与您在调试器中获得的值进行比较:

      NSLog(@"Pointer own address: %p", &bullet);
      NSLog(@"Address to where the pointer is pointing: %p", bullet); //this is what you should get in the debugger
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-07-03
        • 2016-05-17
        • 2019-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-12
        相关资源
        最近更新 更多