Проблемы с памятью при использовании ASIHTTPRequest или изменении размера изображения
Я не могу сказать, где, но у меня проблемы с памятью, загружающей изображения на мой сервер. После примерно 10 или около того успешных загрузок я получаю предупреждения памяти уровня 1, а затем в следующий раз он выходит из-за DateFormatters или в основном из памяти. Вот мой код. Он использует ASIHTTPDataRequest и функцию изменения размера изображения. Я не могу сказать, если его запрос, который не освобождается или если его функция изменения размера изображения не освобождает изображение. Изображения-это огромные фотографии, сделанные с телефона в обычном режиме. затем высокое разрешение было изменено до размера печати и загружено. Где-то по ходу дела мне не хватает какого-то управления памятью, и это сводит меня с ума!
Я получаю предупреждения памяти примерно после 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;
}