У меня есть класс QuantumClone
, который имеет массив из CGPoint
. Один объект QuantumPilot
создает QuantumClone
в начале каждого уровня. На следующем уровне QuantumPilot
записывает свои скорости до QuantumClone
. В начале нового уровня игровой цикл запускает этот кодКак освободить массивы стиля C?
QuantumClone *c = [[self.pilot clone] copy];
c.bulletDelegate = self;
c.weapon = self.pilot.weapon;
[self.clones addObject:c];
Но в конечном итоге игра будет обнулен, и каждый QuantumClone
объект в клонах NSMutableArray
будут удалены.
Я пропущу память, присвоив значения CGPoint pastVelocities[4551]
?
Как их сбросить? Я не могу освободить их, поскольку они не являются объектами Objective-C. Мне нужно вызвать функции C для освобождения этой памяти?
@interface QuantumClone : QuantumPilot <NSCopying> {
CGPoint pastVelocities[4551];
}
- (id)copyWithZone:(NSZone *)zone {
QuantumClone *c = [[[QuantumClone alloc] init] autorelease];
c.weapon = self.weapon;
for (NSInteger i = 0; i < 4551; i++) {
[c recordVelocity:pastVelocities[i] firing:pastFireTimings[i]];
}
[c recordLatestIndex:timeIndex];
return c;
}
- (void)recordVelocity:(CGPoint)vel firing:(BOOL)firing {
CGPoint p = pastVelocities[timeIndex];
p.x = vel.x;
p.y = vel.y;
pastVelocities[timeIndex] = p;
bool fired = firing;
pastFireTimings[timeIndex] = fired;
timeIndex++;
}
@interface QuantumPilot : CCNode {}
....
@property (nonatomic, retain) QuantumClone *clone;
- (void)copyDeltas {
[self.clone recordVelocity:ccp(self.vel.x, -self.vel.y) firing:self.firing];
}
- (void)createClone {
self.clone = [[[QuantumClone alloc] init] autorelease];
self.clone.active = YES;
self.clone.weapon = self.weapon;
}
Комментарий к нисходящей линии? Я пытаюсь обеспечить, чтобы я не пропускал память, назначая этим CGPoints – quantumpotato
Что такое CGPoint? –
struct CGPoint { CGFloat x; CGFloat y; }; typedef struct CGPoint CGPoint; в CoreGraphics/CGGeometry.h – quantumpotato