私はこのコードを持っています:
Texture2D *cachedTexture;
if(cachedTexture = [cachedTextures objectForKey:aName]) {
return cachedTexture;
}
// We are using imageWithContentsOfFile rather than imageNamed, as imageNamed caches the image in the device.
// This can lead to memory issue as we do not have direct control over when it would be released. Not using
// imageNamed means that it is not cached by the OS and we have control over when it is released.
NSString *filename = [aName stringByDeletingPathExtension];
NSString *filetype = [aName pathExtension];
NSString *path = [[NSBundle mainBundle] pathForResource:filename ofType:filetype];
UIImage *maskImage=[UIImage imageWithContentsOfFile:path];
CGImageRef maskRef = maskImage.CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
cachedTexture = [[Texture2D alloc] initWithMask:mask filter:aFilter];
[cachedTextures setObject:cachedTexture forKey:aName];
静的アナライザーは次のように記述しました。1)関数CGImageMaskCreateを呼び出すと、+1保持カウンターを持つコアファンデーションオブジェクトが返されます。2)マスクに割り当てられて保存されたオブジェクトは、この実行パスの後半で参照されず、+1の保持カウンターがあります[マスクリリース]動作しません...マスクはポイナーではありません...このリークを修正するにはどうすればよいですか?