Я делаю то же самое в моей программе.
В init:
self.turrets = [NSMutableArray array];
for (count = 0; count < kMaxTurrets; count++)
[self spawnTurret];
spawnTurret:
evTurret* aTurret = [[[evTurret alloc] init] autorelease];
CGImageRef theImage = [self turretContents];
aTurret.contents = theImage;
double imageHeight = CGImageGetHeight(theImage);
double imageWidth = CGImageGetWidth(theImage);
double turretSize = 0.06*(mapLayer.bounds.size.width + mapLayer.bounds.size.height)/2.0;
aTurret.bounds = CGRectMake(-turretSize*0.5, turretSize*0.5, turretSize*(imageWidth/imageHeight), turretSize);
aTurret.hidden = YES;
[mapLayer addSublayer:aTurret];
[self.turrets addObject:aTurret];
По сути, я просто постоянно создаю объекты CALayer. Это будет быстрее, чем их копирование, так как для этого метода требуется только 1 вызов CALayer для свойства, а не для его копирования, который требует, чтобы вы прочитали свойство и затем дополнительно установили его. Я породил около 500 объектов, используя этот метод за 0,02 секунды, так что это определенно быстро. Если вам действительно нужно больше скорости, вы можете даже кэшировать файл изображения.