我们在iOS平台上有一个直播功能,我们测试发现,在上传oss的部分上传的数据会一直存在在内存中无法释放。
-(void) updateMainifestOnServer : (NSData ) data : (NSString ) streamName : (NSString *)filename
{
//NSData *fileContent = [NSData dataWithContentsOfFile:self.manifestPath];
OSSPutObjectRequest * put = [OSSPutObjectRequest new];
put.bucketName = self.stream.bucket;
//put.objectKey = [@"file_test/" stringByAppendingFormat:@"%ld/live/%ld/%@",[self.stream getOwnerID],[self.stream getStreamID],filename];
put.objectKey = [self.stream.storage stringByAppendingString:filename];
put.uploadingData = data;
put.contentType = @"application/vnd.apple.mpegurl";
put.cacheControl =@"no-cache";
OSSTask * putTask = [_ossClient putObject:put];
__weak id weakself = self;
[putTask continueWithBlock:^id(OSSTask *task) {
if (!task.error) {
NSLog(@"upload manifest success!");
} else {
NSLog(@"upload manifest failed, error: %@" , task.error);
}
[weakself s3RequestCompletedForFileName:filename];
return nil;
}];
}
次方法每5秒执行一次,instrumens显示此处的fileContent没有释放,应该是OSSPutObjectRequest没有释放的缘故吧,大家给点思路吧。
已解决。
官方API默认提供的是直接把文件URL赋给uploadingFileURL,而我舍近求远使用了NSData。虽然NSData方法也可以,但是需要自己维护,及时释放。而直接使用URL,阿里云内部的API会帮我们维护NSData,无需手动释放。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。