Hago exactamente lo mismo en mi programa.
En 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];
Básicamente, justo acabo de crear objetos en varias ocasiones CALayer. Va a ser más rápido que copiarlos, ya que este método solo requiere 1 llamada CALayer por propiedad, en lugar de copiarlo, lo que requiere que lea la propiedad y luego la configure. Genero alrededor de 500 objetos usando este método en aproximadamente 0.02 segundos, así que definitivamente es rápido. Si realmente necesitara más velocidad, incluso podría almacenar en caché el archivo de imagen.
¿Por qué necesita para copiarlos? ¿Por qué no crearlos todos desde cero o reducir la cantidad de capas que necesita tu aplicación? –
sí, esa es una opción (crearlos todos desde cero), pero no es terriblemente elegante – Reeds