2010-12-03 7 views
2

サーバーに画像をアップロードする際にメモリの問題がどこにあるのかわかりません。約10回のアップロードが成功すると、レベル1のメモリ警告が表示され、次にDateFormattersが終了するか、基本的にメモリ不足になります。ここに私のコードです。 ASIHTTPDataRequestとイメージのサイズ変更機能を使用します。私はその要求がリリースされていないかどうか、またはイメージのサイズ変更機能がイメージを解放していないかどうかを知ることはできません。画像は通常の高解像度で携帯電話から撮影した巨大な写真で、プリントサイズにリサイズしてアップロードしたものです。どこかのラインに沿ってどこかのメモリ管理が行方不明になっていて、私が怒っている!ASIHTTPRequestまたはImage Resizingを使用したメモリの問題

次のコードを使用して約10回以上サーバーにアップロードした後、メモリの警告が表示されます。私が使用していないASI固有のメモリー管理がいくつかありますか?

こんにちは私はあなたのソフトウェアを使用していますが、私は膨大なメモリの問題にぶつかっています。メモリの警告が表示され、アップロードを中断することなくそれらをクリアする方法がわかりません。 このコードサンプルを見て、私がメモリの問題の原因となっている間違っていることを私に見せてもらえますか?

次のコードを使用して約10回以上サーバーにアップロードした後、メモリの警告が表示されます。私が使用していないASI固有のメモリー管理がいくつかありますか?

こんにちは私はあなたのソフトウェアを使用していますが、私は膨大なメモリの問題にぶつかっています。メモリの警告が表示され、アップロードを中断することなくそれらをクリアする方法がわかりません。 このコードサンプルを見て、私がメモリの問題の原因となっている間違っていることを私に見せてもらえますか?

次のコードを使用して約10回以上サーバーにアップロードした後、メモリの警告が表示されます。私が使用していないASI固有のメモリー管理がいくつかありますか?

こんにちは私はあなたのソフトウェアを使用していますが、私は膨大なメモリ問題に遭遇しています。メモリの警告が表示され、アップロードを中断することなくそれらをクリアする方法がわかりません。 このコードサンプルを見て、私がメモリの問題の原因となっている間違っていることを私に見せてもらえますか?

-(void)uploadPhoto:(UploadObject*)upObject{ 
UIImage *image=[UIImage imageWithContentsOfFile:[upObject.imageObj.imageList objectAtIndex:0]]; 
if([upObject.imageObj.imgType isEqualToString:@"SINGLE"]){ 
    image=[self image:image ByScalingAndCroppingForSize:CGSizeMake(1800, 1200)]; 
}else if([upObject.imageObj.imgType isEqualToString:@"STANDARD8X10"]){ 
    image=[self image:image ByScalingAndCroppingForSize:CGSizeMake(3000, 2400)]; 
}else if([upObject.imageObj.imgType isEqualToString:@"MOUSE"]){ 
    image=[self image:image ByScalingAndCroppingForSize:CGSizeMake(2850, 2400)]; 
}else{ 
    image=[self image:image ByScalingAndCroppingForSize:CGSizeMake(1800, 1200)]; 
} 
NSFileManager *fileManager = [NSFileManager defaultManager]; 
[fileManager setDelegate:self]; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSData *data = [NSData dataWithData:UIImageJPEGRepresentation(image, 100.0f)];//1.0f = 100% quality 
[data writeToFile:[upObject.imageObj.imageList objectAtIndex:0] atomically:YES]; 
__block ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://api.postalpix.com/order/new"]]; 
[request setPostValue:upObject.imageObj.pixID forKey:@"uid"]; 
[request setPostValue:upObject.orderID forKey:@"orderid"]; 
[request setPostValue:upObject.cost forKey:@"total"]; 
[request setPostValue:@"NONE" forKey:@"coupon"]; 
[request setPostValue:[NSString stringWithFormat:@"%d",upObject.total] forKey:@"images"]; 
[request setPostValue:upObject.block forKey:@"block"]; 
[request setPostValue:currentCoupon forKey:@"coupon"]; 
[request setPostValue:[NSString stringWithFormat:@"%d",[upObject.imageObj.copies intValue]] forKey:@"quantity"]; 
[request setTimeOutSeconds:20]; 
request.showAccurateProgress = YES; 
[request setUploadProgressDelegate:self]; 
[request setDelegate:self]; 
[request setFile:[upObject.imageObj.imageList objectAtIndex:0] forKey:@"upfile"]; 
if ([upObject.imageObj.imgType isEqualToString:@"SINGLE"]) 
{ 
    [request setPostValue:@"29375" forKey:@"sku"]; 
    [request setPostValue:@"4x6 Print" forKey:@"description"]; 

}else if ([upObject.imageObj.imgType isEqualToString:@"MOUSE"]) 
{ 
    [request setPostValue:@"28925" forKey:@"sku"]; 
    [request setPostValue:@"Photo Mouse Pad" forKey:@"description"]; 
}else if ([upObject.imageObj.imgType isEqualToString:@"STANDARD8X10"]) 
{ 
    [request setPostValue:@"29376" forKey:@"sku"]; 
    [request setPostValue:@"8x10 Print" forKey:@"description"]; 
} 
request.shouldContinueWhenAppEntersBackground=YES; 
[request setCompletionBlock:^{ 
    NSDictionary *jo=[[request responseString] JSONValue]; 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    [fileManager removeItemAtPath:[currentUp.imageObj.imageList objectAtIndex:0] error:NULL]; 
    [self removeFinishedUpload:currentUp.block]; 
    currentUp=[self getNextUploadObject]; 
    if(currentUp){ 
    [self uploadPhoto:currentUp]; 
    }else{ 
    currentUploadCount=0; 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"UPDATEMOREBADGE" object:nil]; 
    isUploading=NO; 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"HIDE_PROGRESS" object:nil]; 
    } 
}]; 
[request setFailedBlock:^{ 
    NSError *error = [request error]; 
    [self restartUpload]; 
}]; 
[request startAsynchronous]; 
} 


- (UIImage*)image:(UIImage *)image ByScalingAndCroppingForSize:(CGSize)targetSize 
{ 
UIImage *sourceImage = image; 
UIImage *newImage = nil;   
CGSize imageSize = sourceImage.size; 
CGFloat width = imageSize.width; 
CGFloat height = imageSize.height; 
CGFloat targetWidth = targetSize.width; 
CGFloat targetHeight = targetSize.height; 
CGFloat scaleFactor = 0.0; 
CGFloat scaledWidth = targetWidth; 
CGFloat scaledHeight = targetHeight; 
CGPoint thumbnailPoint = CGPointMake(0.0,0.0); 

if (CGSizeEqualToSize(imageSize, targetSize) == NO) 
{ 
     CGFloat widthFactor = targetWidth/width; 
     CGFloat heightFactor = targetHeight/height; 

     if (widthFactor > heightFactor) 
    scaleFactor = widthFactor; // scale to fit height 
     else 
    scaleFactor = heightFactor; // scale to fit width 
     scaledWidth = width * scaleFactor; 
     scaledHeight = height * scaleFactor; 

     // center the image 
     if (widthFactor > heightFactor) 
    { 
    thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5; 
    } 
     else 
    if (widthFactor < heightFactor) 
    { 
    thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5; 
    } 
}  

UIGraphicsBeginImageContext(targetSize); // this will crop 

CGRect thumbnailRect = CGRectZero; 
thumbnailRect.origin = thumbnailPoint; 
thumbnailRect.size.width = scaledWidth; 
thumbnailRect.size.height = scaledHeight; 

[sourceImage drawInRect:thumbnailRect]; 

newImage = UIGraphicsGetImageFromCurrentImageContext(); 
if(newImage == nil) 
     UIGraphicsEndImageContext(); 
return newImage; 
} 

答えて

1

私はライン

if(newImage == nil) 
    UIGraphicsEndImageContext(); 

が正しくないと思います。 UIGraphicsEndImageContext()は条件なしで呼び出さなければなりません。

+0

私はそれを呼び出さないとメモリ問題ですか?それは他の領域で動作します。 – felixdkatt

+0

btw私はそれを修正するだろうが、私はアップロードプロセスで他のメモリの問題を抱えている可能性があると私は考えていない問題を言わないでください。私は今、その行を変更し、皆さんに知らせるつもりです。 – felixdkatt

+0

また、私はSBJSONを使ってリークレポートを取得しているのに気付いていませんが、なぜかそれはいくつかのリークで戻ってきます。私のすべての基地をカバーしようとしています。これまでの皆さん、おかげさまでご助力ありがとこれが正しい修正であるかどうか、私はあなたにtiaを知らせるでしょう。アップルの技術サポートも私を助けてくれました。 – felixdkatt

関連する問題