0

我正在使用此代码创建一些对象,然后将它们存储在一个数组中

for (int iy=0; iy<5; iy++) {
        for (int ix=0; ix<5; ix++) {

            TerrainHex *myObject = [[TerrainHex alloc] initWithName:(@"grassHex instance 10000") width:mGameWidth height:mGameHeight indexX:ix indexY:iy];
            myObject.myImage.y += 100;

            [TerrainHexArray addObject:myObject];

            [self addChild:(id)myObject.myImage];
        }
    }
    NSLog(@"%lu", sizeof(TerrainHexArray));

几个问题。

  1. 日志只显示4,这没有意义,不应该是5x5,即25吗?
  2. 我是在那里创建 25 个单独的对象指针,还是只是一遍又一遍地重复使用同一个对象指针?我正在尝试将所有 25 个指针保存到一个数组中。
  3. 我正在使用 ARC,但我必须在那里发布任何东西吗?
4

2 回答 2

2

日志只显示4,这没有意义,不应该是5x5,即20吗?

用于[TerrainHexArray count]获取数组中对象的数量。sizeof(TerrainHexArray)给你一个 的大小,id *在你的系统中是 4 个字节。

我是在那里创建 20 个单独的对象指针,还是只是一遍又一遍地重复使用同一个对象指针?我正在尝试将所有 20 个指针保存到一个数组中。

您正在创建 25 个对象

我正在使用 ARC,但我必须在那里发布任何东西吗?

不。

于 2012-07-09T19:02:16.257 回答
2
  1. sizeof()告诉您变量的字节大小,该变量TerrainHexArray(可能)是指向 NSMutableArray 的指针。假设是 32 位系统,指针是 32 位,即 4 个字节。你应该[TerrainHexArray count]改用。这是一个返回数组中对象数量的方法。

  2. 您正在创建 25 个对象实例,而不是一遍又一遍。myObject只是一个持有指向给定对象的指针的变量。通过赋值更改它并不会消除它之前指向的对象(尽管 ARC 负责释放它)。

  3. 不,ARC 会为您处理内存管理。

一个挑剔:假设TerrainHexArray是 NSArray 的一个实例,你不应该大写第一个字母。这不是语言的要求,但习惯上将类名大写,但对变量名使用小写首字母。terrainHexArray会更合适,并使代码更具可读性。

于 2012-07-09T19:05:22.453 回答