楼主给的信息实在是有限,没法确定楼主的问题出在哪里
以下内容基于这么一个推测:即楼主要做的事情是通过大量计算自动地批量生成图片,图片的量大,且每张图片的尺寸也都非常大,而楼主使用的是 UIKit 中提供的类似 UIGraphicsBeginImageContext 和 UIGraphicsEndImageContext 之类的简单接口。
一句话,这个问题没有简单无脑的解决方案,但稍微深入一下,办法却还是很多。
1. UIKit/Foundation 中提供的接口并不适合做这件事情,这与语言无关,即使用 objc 通过 mrc 绕开 arc 的坑也是一样。性能非常堪忧。
对于图片的绘制,楼主应该考虑使用 Metal 提供的 Compute Shader,将图片分阶段绘制到 MTLTexture 中。
使用 Metal 确实存在一些门槛,如果不会的话,试试查阅一些第三方库,比如
https://github.com/BradLarson/GPUImage 说不定有提供对于你的需求现成的方法。
2. 注意 Swift 中并不是不支持内存管理,Swift 其实提供有一系列类似 UnsafeBufferPointer 的工具来管理内存,楼主可以仔细读一下官方的文档:
https://developer.apple.com/documentation/swift/manual_memory_management这一系列方法应该就是对楼主问题最直接的答案。
3. 最后,出乎意料地,很多人并不知道许多 Unix C Level 的函数在 Swift 中是可以直接调用的(并不是私有 API ),比如 mmap ……
https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man2/mmap.2.html具体例子我记得苹果去年的 ImageRecognition Demo 中有,使用 mmap 将神经网络的参数文件直接映射进内存空间,以节省内存使用,楼主这里可以反过来使用它来写文件(需要 Import Darwin )。