Ich mache genau das gleiche in meinem Programm.
In 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];
Im Grunde habe ich nur CALayer Objekte nur wiederholt erstellen. Es wird schneller als das Kopieren sein, da diese Methode nur 1 CALayer-Aufruf pro Eigenschaft erfordert, im Gegensatz zu dem Kopieren, das erfordert, dass Sie die Eigenschaft lesen und dann zusätzlich festlegen. Ich spawne ungefähr 500 Objekte mit dieser Methode in etwa 0,02 Sekunden, also ist es definitiv schnell. Wenn Sie wirklich mehr Geschwindigkeit benötigen, können Sie sogar die Bilddatei zwischenspeichern.
Warum brauchen Sie, sie zu kopieren? Warum nicht alle von Grund auf neu erstellen oder die Anzahl der Ebenen reduzieren, die Ihre App benötigt? –
ja, das ist eine Option (sie alle von Grund auf neu zu erstellen), aber es ist nicht schrecklich elegant – Reeds