1

ここに私のコードがあります-iOS8以降のXcode 6.3でのコンパイル:

//Create the emitter layer
CAEmitterLayer *emitter = [CAEmitterLayer layer];
emitter.emitterPosition = position;
emitter.emitterMode = kCAEmitterLayerOutline;
emitter.emitterShape = kCAEmitterLayerCircle;
emitter.renderMode = kCAEmitterLayerAdditive;
emitter.emitterSize = CGSizeMake(100 * multiplier, 0);

//Create the emitter cell
CAEmitterCell* particle = [CAEmitterCell emitterCell];
particle.emissionLongitude = M_PI;
particle.birthRate = multiplier * 1000.0;
particle.lifetime = multiplier;
particle.lifetimeRange = multiplier * 0.35;
particle.velocity = 180;
particle.velocityRange = 130;
particle.emissionRange = 1.1;
particle.scaleSpeed = 1.0; // was 0.3

particle.color = CGColorCreateCopy([UIColor colorWithRed:.5 green:.5 blue:.5 alpha:.5].CGColor);
UIImage *theimage = [UIImage imageNamed:@"tspark"];
particle.contents = (__bridge id)(theimage.CGImage);
particle.name = @"particle";

emitter.emitterCells = @[particle];

何をリリースしようか悩んでいます!

ありがとう!

4

1 に答える 1

2

Create Rule」は、Core Foundation 呼び出しの名前に「Create」または「Copy」が含まれている場合、それを解放する (または所有権を ARC に譲渡する必要がありますが、これはここでは関係ありません) ことを示しています。

のドキュメントCGColorCreateCopyもこれを明示し、次のように述べています。

を使用してこのオブジェクトを解放する責任がありますCGColorRelease

したがって、 によって返されたオブジェクトを解放することで、これを修正できますCGColorCreateCopy

CGColorRef colorRef = CGColorCreateCopy([UIColor colorWithRed:.5 green:.5 blue:.5 alpha:.5].CGColor);
particle.color = colorRef;
CGColorRelease(colorRef);

CGColorCreateCopy明らかに、完全に回避する方がはるかに簡単です。

particle.color = [UIColor colorWithRed:.5 green:.5 blue:.5 alpha:.5].CGColor;
于 2015-04-15T22:50:30.327 に答える