我正在使用此代码创建一些对象,然后将它们存储在数组中
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));
几个问题。
答案 0 :(得分:2)
日志只显示4,这没有意义,不应该是5x5,不是20?
使用[TerrainHexArray count]
获取数组中的对象数量。 sizeof(TerrainHexArray)
为您提供id *
的大小,即系统中的4个字节。
我在那里创建了20个单独的对象指针,或者只是一遍又一遍地重复使用同一个指针?我正在尝试将所有20个指针保存到数组中。
您正在创建25个对象
我正在使用ARC,但是我必须在那里发布任何东西吗?
没有
答案 1 :(得分:2)
sizeof()
告诉您变量TerrainHexArray
的大小(以字节为单位),它可能是(可能)指向NSMutableArray的指针。假设一个32位系统,指针是32位,即4个字节。您应该使用[TerrainHexArray count]
代替。这是一个返回数组中对象数量的方法。
您正在创建25个对象实例,而不是一遍又一遍。 myObject
只是一个包含指向给定对象的指针的变量。通过赋值更改它并不会消除它之前指向的对象(尽管ARC负责释放它)。
不,ARC会为您负责内存管理。
一个挑剔:假设TerrainHexArray
是NSArray的一个实例,你不应该把第一个字母大写。这不是语言的要求,但是通常将类名称大写,但是使用小写的第一个字母表示变量名称。 terrainHexArray
会更合适,并使代码更具可读性。