私のアプリでは、UIImage
の配列に移動し、この画像で物を作るループがあります。私が入れた関数の開始で非常にバックグラウンドスレッドでのループ作業 :私はUIImage
を作成するループで[プールの解放];私のアプリをクラッシュする
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
と終わりで
[pool release];
ので、私はそれので、それを解放する必要があります私が解放をしないなら私に記憶の警告を与えなさい。
アプリがループを終了し、それは私にBAD_ACCESS
エラーを与え、アプリをクラッシュ
[pool release];
に着きます。
編集
これはループ
UIImage *tmp = [image rotate:UIImageOrientationRight];
//do some stuff with this image
[tmp release];
これは回転方式でのメソッドです:私はあなたのクラッシュは、おそらく時に自動解放に関連していると思います
UIImage* copy = nil;
CGRect bnds = CGRectZero;
UIImage* copy = nil;
CGContextRef ctxt = nil;
CGImageRef imag = self.CGImage;
CGRect rect = CGRectZero;
CGAffineTransform tran = CGAffineTransformIdentity;
rect.size.width = CGImageGetWidth(imag);
rect.size.height = CGImageGetHeight(imag);
bnds = rect;
UIGraphicsBeginImageContext(bnds.size);
ctxt = UIGraphicsGetCurrentContext();
switch (orient)
{
case UIImageOrientationLeft:
case UIImageOrientationLeftMirrored:
case UIImageOrientationRight:
case UIImageOrientationRightMirrored:
CGContextScaleCTM(ctxt, -1.0, 1.0);
CGContextTranslateCTM(ctxt, -rect.size.height, 0.0);
break;
default:
CGContextScaleCTM(ctxt, 1.0, -1.0);
CGContextTranslateCTM(ctxt, 0.0, -rect.size.height);
break;
}
CGContextConcatCTM(ctxt, tran);
CGContextDrawImage(UIGraphicsGetCurrentContext(), rect, imag);
copy = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
if (imag) {
CFRelease(imag);
}
return copy;
UIImageを初期化する方法のコードを投稿できますか? –
iコードが – MTA
の投稿を編集します。プールが排水されると、プールが作成されてから自動リリースされたものがすべて解放されます。これにより2つの問題が発生する可能性があります。1)既にリリースされているものをリリースする - これにより、通常、その旨のエラーメッセージが表示されます。 2)あなたのUIオブジェクトの1つのように、実際にハングアップする必要があるものを解放する。これは通常、非常に役に立たないクラッシュメッセージをもたらす。特定の原因がかなり明白である場合もありますが、実際には把握するのが難しい場合もあります。 –