山を表現するために、パスに沿って曲線を動的に描画しようとしています。
を返す関数がありますCGPathRef
。これは、構造体への C ポインターです。
-(CGPathRef)newPath
{
CGMutablePathRef mutablePath = CGPathCreateMutable();
//inserting quad curves, etc
return mutablePath;
}
次に、これらCGPathRefs
を でラップして渡しUIBezierPath
ます。
-(NSArray*)otherFunction
{
CGPathRef ref = [self newPath];
UIBezierPath *path = [UIBezierPath bezierPathWithCGPath: ref];
NSArray* paths = @[path];
CGPathRelease(ref);
return paths;
}
次に、返されたパスの配列を取得し、 を使用して画面に表示しますSKShapeNode
。
SKShapeNode *node = [SKShapeNode new];
NSArray* paths = [self otherFunction];
CGPathRef ref = [[paths firstObject] CGPath];
node.path = ref;
node.fillColor = [UIColor orangeColor];
node.lineWidth = 2;
そして最後に。
[self addChild:node];
CGPathRelease(node.path);
この一連のアクションを数回繰り返すと、プログラムが壊れて表示されます。
EXC_BAD_ACCESS コード = 2 の UIApplicationMain。
メモリリークがあることを理解しています。
CGPathRef
私の質問は、いくつかの関数に渡して別のクラスにラップすることになったときに、解放をどのように処理するかです。
コードを更新したところ、EXC_I386_GPFLT エラーが発生しました。