Memory leaks 从ALAssetRepresentation获取字节时内存泄漏
我正在上传摄像机的视频和图像。上传完成后,我得到32字节的内存泄漏。仪表指示泄漏在下面的管线中Memory leaks 从ALAssetRepresentation获取字节时内存泄漏,memory-leaks,Memory Leaks,我正在上传摄像机的视频和图像。上传完成后,我得到32字节的内存泄漏。仪表指示泄漏在下面的管线中 NSUInteger readStatus = [rep getBytes:buffer fromOffset:_startFromByte length:chunkSize error:NULL]; 但我看不出这句话有什么不对 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSUInteger readStatus = [rep getBytes:buffer fromOffset:_startFromByte length:chunkSize error:NULL];
但我看不出这句话有什么不对
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
__block __typeof__(self) _self = self;
ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset) {
ALAssetRepresentation *rep = [myasset defaultRepresentation];
NSUInteger chunkSize = CHUNK_SIZE;
uint8_t *buffer = malloc(chunkSize);
NSUInteger readStatus = [rep getBytes:buffer fromOffset:_startFromByte length:chunkSize error:NULL];
if (readStatus == 0) {
// Free up memory so we don't leak.
free(buffer);
dispatch_sync(dispatch_get_main_queue(), ^ {
[_self cleanupConnectionSuccessful:NO];
});
return;
}
NSData *bytes = [NSData dataWithBytes:buffer length:readStatus];
free(buffer);
dispatch_sync(dispatch_get_main_queue(), ^ {
[_self prepareRequestAndUploadData:bytes];
});
};
ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError *err) {
NSLog(@"Error: %@", [err localizedDescription]);
};
[_assetslibrary assetForURL:_fileUrl resultBlock:resultblock failureBlock:failureBlock];
});
只需添加@autoreleasepool块,就可以清除所有自动释放的对象。看起来在iOS7之后ARC发生了一些变化
@autoreleasepool {
NSUInteger readStatus = [rep getBytes:buffer fromOffset:_startFromByte length:chunkSize error:NULL];
}
很抱歉耽搁这么久,但我正在做另一个项目,没有时间检查你的建议。遗憾的是,这并没有起到任何作用,我仍然有32字节的内存泄漏;自由(缓冲)to
NSData*bytes=[NSData datawithbytesnopy:buffer length:readStatus freewwhendone:YES]代码>但这并没有改变任何事情。这个漏洞不是什么大问题,但却让我发疯。