UIImage
の所有権は約CGImage
で不明です。 CGImage
はコピーされていないようですが、ドキュメントによって保証されていません。だから我々はそれを自分で処理しなければならない。
私はUIImage
の新しいサブクラスを使用してこの問題を処理しました。 CGImage
をそのままにして、dealloc
のときに放してください。
ここはサンプルです。
@interface EonilImage : UIImage
{
@private
CGImageRef sourceImage;
}
- (id)initWithCGImage:(CGImageRef)imageRef scale:(CGFloat)scale orientation:(UIImageOrientation)orientation;
@end
@implementation EonilImage
- (id)initWithCGImage:(CGImageRef)imageRef scale:(CGFloat)scale orientation:(UIImageOrientation)orientation
{
self = [super initWithCGImage:imageRef scale:scale orientation:orientation];
if (self)
{
sourceImage = imageRef;
CGImageRetain(imageRef);
}
return self;
}
- (void)dealloc
{
CGImageRelease(sourceImage);
[super dealloc];
}
@end
-[UIImage CGImage]
プロパティによって返さCGImage
はinitメソッド、クラス店別途CGImage
に渡さCGImage
同じであることが保証されていないため。
https://bugreport.apple.com/にドキュメントバグを提出して、これを明確にするように頼むことをお勧めします。 –