【发布时间】:2015-08-21 05:28:37
【问题描述】:
我正在尝试将一个大的本地文件拆分为单独的 NSData 部分,然后使用 AFNetworking 2 上传每个文件部分。所有上传成功后,每个文件部分的数据仍在内存中。每次完成部分上传后如何释放内存?我错过了什么?
代码如下:
-(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];
}
谢谢,托马斯
【问题讨论】:
标签: objective-c memory nsdata afnetworking-2