0
我试图将一个大的本地文件拆分成单独的NSData部分,然后使用AFNetworking 2上传每个文件部分。所有上传成功后,每个文件部分的数据仍在内存中。如何在每次完成部件上传后释放记忆?我错过了什么?AFURLSessionManager数据上传后的空闲内存
下面是代码:
-(void) uploadRequestWithPart:(FilePart*) part{
// setup request
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:part.uploadURL];
[request setHTTPMethod:@"PUT"];
[request setValue:part.fileType forHTTPHeaderField:@"Content-Type"];
[request setValue:@"private" forHTTPHeaderField:@"x-amz-acl"];
if(!sessionManager) sessionManager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSProgress *progress = nil;
// create Data from file part
FILE *file = fopen([part.fileURL.path UTF8String], "rb");
if(file == NULL) return;
void *data = malloc(part.size);
fseeko(file, part.offset, SEEK_SET);
fread(data, 1, part.size, file);
fclose(file);
NSURLSessionUploadTask *upTask;
upTask = [sessionManager uploadTaskWithRequest:request fromData:[NSData dataWithBytesNoCopy:data length:part.size] progress:&progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
if (error){
NSLog(@"%@",error.localizedDescription);
[upTask cancel]; // <- does cancelling this task release the NSData??
upTask = nil;
} else{
NSLog(@"Upload complete");
[upTask cancel]; // <- does cancelling this task release the NSData??
upTask = nil;
}
[progress removeObserver:self forKeyPath:@"partCompleted" context:nil];
}];
// setup upload progress
[progress setUserInfoObject:part forKey:@"part"];
[progress addObserver:self forKeyPath:@"partCompleted" options:NSKeyValueObservingOptionNew context:nil];
// start upload
[upTask resume];
}
谢谢,托马斯