2017-10-05 102 views
1

使用UIImagePickerController捕获图像时,我遇到内存问题。我的用例要求我一次捕获多达10个图像,并且当用户单击摄像头叠加层中出现的完成按钮时,图像应发送到服务器,同时显示在CollectionView中,关闭UIImagePickerController实例。内存警告UIImagePickerController

在捕获第10张图像时,我手动关闭拾取器并将图像发送到服务器并将其显示在collectionView中。由于我有一些图像阈值计数,我使用数组来保存图像,每次点击“完成”按钮或用户捕捉第10张图像时,我都会清空数组。

我最初认为,我遇到了内存问题,因为collectionView显示的图像没有调整大小,因此我调整了图像大小并显示在collectionView中。

然后,Google搜索后,我发现内存泄漏可能发生在调整图像大小,我也修复它,但我仍然遇到内存问题和每次在相同的图像数约45张图像(捕获10张图像4次然后在iPad4的第5次捕获5张图像后获得内存警告和崩溃)。然后,我在didFinishPickingMediaWithInfo中评论了我所有的代码,除了捕获图像,我的应用程序没有进行任何处理,并且仍然在第45张图像中获取内存警告。

我不知道是什么问题。 UIImagePickerController缓存它捕获的图像或类似的东西?

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) 
{ 
    //All code in this section is commented out and no processing is done in any part of the code with the images captured. 
} 
+0

内存警告发生在两种类型 - > 1.你IMAGESIZE很重2.您的设备内存不足 –

+0

的事情是我想知道的内存警告是如何造成的。如果我只是捕捉图像而对它无所作为,我怎么能最终发出内存警告。我不是将捕获的图像写入任何内存位置,我甚至没有像调整它的大小那样处理图像。只需连续捕捉图像,并在didFinishPickingMediaWithInfo中不做任何事情。 –

+0

我认为问题不是来自图像或文件的大小,而是代码中存在一个保留周期。当有两个或更多的对象持有相同的参考时,就会发生这种情况.. – RoccoBerry

回答