在Objective c中存储指向数组中对象的指针

时间:2012-07-09 19:00:19

标签: objective-c nsmutablearray

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

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但是我必须发布 那里有什么?

2 个答案:

答案 0 :(得分:2)

  

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

使用[TerrainHexArray count]获取数组中的对象数量。 sizeof(TerrainHexArray)为您提供id *的大小,即系统中的4个字节。

  

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

您正在创建25个对象

  

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

没有

答案 1 :(得分:2)

  1. sizeof()告诉您变量TerrainHexArray的大小(以字节为单位),它可能是(可能)指向NSMutableArray的指针。假设一个32位系统,指针是32位,即4个字节。您应该使用[TerrainHexArray count]代替。这是一个返回数组中对象数量的方法。

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

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

  4. 一个挑剔:假设TerrainHexArray是NSArray的一个实例,你不应该把第一个字母大写。这不是语言的要求,但是通常将类名称大写,但是使用小写的第一个字母表示变量名称。 terrainHexArray会更合适,并使代码更具可读性。