我在[self setImageData:[AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer]];
以下代码片段捕获图片并提供jpg格式的数据。当我们拍摄更多照片时,系统会报告低内存警告。
在分析器中我们看不到泄漏,但有时候应用程序报告即使在20MB且应用程序崩溃时内存警告也很低。
[[self stillImageOutput] captureStillImageAsynchronouslyFromConnection:videoConnection
completionHandler:^(CMSampleBufferRef imageSampleBuffer, NSError *error)
{
[[self captureSession] stopRunning];
if (imageSampleBuffer != NULL)
{
CFDictionaryRef exifAttachments = CMGetAttachment(imageSampleBuffer, kCGImagePropertyExifDictionary, NULL);
if (exifAttachments)
{
NSLog(@"attachements: %@", exifAttachments);
}
[self setImageData:[AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer]];
}
imageSampleBuffer = nil;
// call the designated delegate
[self.aCDMCameraCaptureNotificationDelegate imageDidSuccessfullyCaptured];
}];
答案 0 :(得分:0)
根据图像的分辨率,图像可能占用内存中的一些空间。您需要确保您生成的图像不会占用一切。有一个名为SDWebImage的Web图像缓存库,它可以将您的图像存储在内存和磁盘上的键值存储中,因此如果内存压力增加太多,它可以刷新内存中的图像缓存,当您需要恢复图像时,可以调用它来自磁盘。
如果您在屏幕上显示图像,则捕获中的一个图像很好,但如果您要显示多个图像,请考虑将图像调整为相应的imageView大小,并将原始图像存储在缓存中。
答案 1 :(得分:0)
分析后,我看到以下内存泄漏。
# Address Category Event Type RefCt Timestamp Size Responsible Library Responsible Caller
0 0x2087cb80 __NSDate Malloc 1 00:18.446.047 16 AVFoundation -[AVCaptureSession _stopPreviewing]
1 0x2087cb80 __NSDate Autorelease 00:18.446.056 0 AVFoundation -[AVCaptureSession _stopPreviewing]
2 0x2087cb80 __NSDate Release 0 00:28.472.781 0 Foundation -[NSAutoreleasePool drain]
3 0x2087cb80 __NSDate Free 0 00:28.472.787 -16 Foundation -[NSAutoreleasePool drain]
4 0x2087cb80 Malloc 16 Bytes Malloc 1 00:42.834.501 16 libdispatch.dylib _dispatch_call_block_and_release
您能指出导致此内存泄漏的语句吗?