CAKeyFrameAnimation を使用して、いくつかの png 画像をアニメーション化しています。を使用して、1つのpng画像からそれらを切り取りましたCGImageCreateWithImageInRect
XCode で Analyze 関数を実行すると、潜在的なメモリ リークが表示されます。彼らはの理由ですCGImageCreateWithImageInRect
。しかし、アニメーション オブジェクトの作成後に CGImageRelease を使用すると、画像が表示されません (理由はわかっていますが、リリースを使用しないとリークが発生します)。
誰かがこのメモリの問題の状況を説明してもらえますか? そして、最善の解決策は何ですか?「カット」ごとに CGImageRefs を使用して UIImages を作成することを考えていました。しかし、CAKeyFrameAnimation は CGImageRef のフィールドを使用するので、その UIImages を作成する必要はないと考えました。
UIImage *source = [UIImage imageNamed:@"my_anim_actions.png"];
cutRect = CGRectMake(0*dimForImg.width,0*dimForImg.height,dimForImg.width,dimForImg.height);
CGImageRef image1 = CGImageCreateWithImageInRect([source CGImage], cutRect);
cutRect = CGRectMake(1*dimForImg.width,0*dimForImg.height,dimForImg.width,dimForImg.height);
CGImageRef image2 = CGImageCreateWithImageInRect([source CGImage], cutRect);
NSArray *images = [[NSArray alloc] initWithObjects:(__bridge id)image1, (__bridge id)image2, (__bridge id)image2, (__bridge id)image1, (__bridge id)image2, (__bridge id)image1, nil];
CAKeyframeAnimation *myAnimation = [CAKeyframeAnimation animationWithKeyPath: @"contents"];
myAnimation.calculationMode = kCAAnimationDiscrete;
myAnimation.duration = kMyTime;
myAnimation.values = images; // NSArray of CGImageRefs
[myAnimation setValue:@"ANIMATION_MY" forKey:@"MyAnimation"];
myAnimation.removedOnCompletion = NO;
myAnimation.fillMode = kCAFillModeForwards;
CGImageRelease(image1);CGImageRelease(image2);//YES or NO