2012-01-08 5 views
3

を解決する方法を、静的アナライザは、このように、一つだけ問題があります。Xcodeの静的アナライザはARCの下に1つのリーク報告したコードの一部2kのラインのうち

spellDetailModalViewController *detailVC = [[spellDetailModalViewController alloc]init]; 
UIImage *tempImage = self.spellImageView.image; 
CGRect newSize = CGRectMake(0.0, 0.0, 320.0, 305.0); 
CGImageRef temp = CGImageCreateWithImageInRect([tempImage CGImage], newSize); 
UIImage *passingImage = [UIImage imageWithCGImage:temp]; 
temp=nil; 

それはCGImageRef「TEMP」という文句を言っています潜在的にリークされ、+1の保持カウントを有する。私はイメージがモーダルViewControllerに渡された後にそれをゼロに設定します。明らかに、ARCの下では、私は[暫定リリース]をARCの下で呼び出すことはできません。何をすべきかわからない。 大変助かりました。

答えて

4

あなたはCGImageCreateWithImageInRectアップルのドキュメントからCGImageReleasetemp

CGImageRef temp = CGImageCreateWithImageInRect([tempImage CGImage], newSize); 
UIImage *passingImage = [UIImage imageWithCGImage:temp]; 
CGImageRelease(temp); 

する必要があります。

結果のイメージは、あなたがこの関数を呼び出した後、元の画像を放出する可能性を意味し、元の画像への参照を保持します。

+0

多くのありがとう@CocoaFu - すぐに解決しました。私はドキュメントで、それで私の質問を見つけることができませんでした。私は本当にあなたの助けに感謝します - 歓声。 – Skybird

+1

@Justin修正していただきありがとうございます! – zaph

+0

@CocoaFuあなたは歓迎です=)私が行った変更が実際に何か違いを生むかどうかは確かに思い出せません(エラーなしで 'NULL'を渡す能力を超えて)。 – justin

0

CGImageCore Graphicsオブジェクトであり、ARCはコアライブラリを処理できません。だからCGImageReleaseまたはその警告を渡すためのより良い方法を使用する必要があります、そのようなimageWithCIImageメソッドを使用してください。

CIImage *fooImage = [CIImage imageWithCGImage:temp.CGImage]; 
UIImage *passingImage = [UIImage imageWithCIImage:fooImage]; 
関連する問題