我想测试一些代码,以管理没有足够的可用磁盘空间来完成操作的条件.
但是,我无法实现这种情况.我试图从iTunes同步填充设备,但要么我没有太多磁盘空间,要么内容将超过设备容量,iTunes将不允许同步.
我确信必须有一个更容易和更好的策略来测试设备上的这种情况,但我无法弄明白.我将不胜感激以及您可以分享的关于此的提示或经验.
我只在iOS 9上观察到这种行为; iOS 8正常工作.
我怀疑这可能是SDK上的一个错误,我已经向Apple(22644754)开了一个雷达,但我发现它很奇怪,我觉得我可能会错过一个电话或一个避免泄漏的步骤.
我观察到的是,每次调用CIContext.createCGImage时,都会增加内存使用量.棘手的部分是内存增加发生在应用程序之外.
如果从Xcode查看"内存报告",可以在"其他进程"部分看到内存增加.
基本上,我所做的导致问题的是以下(我已经将代码简化为严格重现泄漏所需的部分):
首先,我创建一个由EAGLContext支持的CIContext:
let glContext = EAGLContext(API: .OpenGLES2)!
let ciContext = CIContext(EAGLContext: glContext, options: [kCIContextOutputColorSpace : NSNull()])
Run Code Online (Sandbox Code Playgroud)
然后,我使用以下内容渲染图像:
let input = CIImage(image: UIImage(named: "DummyImage")!)!
ciContext.createCGImage(input, fromRect: input.extent)
Run Code Online (Sandbox Code Playgroud)
DummyImage只是一个示例图像文件.泄漏与此图像的大小直接相关,因此最好使用较大的泄漏以使问题更加明显.
正如你所看到的,我没有使用任何CIFilter(使用它们导致相同的结果),而且我没有捕获生成的图像(即使我捕获它,我也无法使用CGImageRelease,因为对象是自动管理的) .
如果渲染代码执行的次数足够多,则内存将增长太多,以至于正在运行的应用程序将被杀死.
一个有趣的观察是,销毁CIContext并没有什么区别,但是破坏EAGLContext确实会返回被占用的内存.这让我觉得泄漏发生在OpenGL方面.
我在代码中遗漏了哪些可能导致泄漏的内容?我是否可以通过电话来释放EAGLContext占用的内存?(一直重新创建它不是一种选择,因为它是一项昂贵的操作).
我创建了一个简单的项目来重现这个问题.您可以在以下位置找到它:
https://www.dropbox.com/s/zm19u8rmujv6jet/EAGLContextLeakDemo.zip?dl=0
重现的步骤是:
从 SwiftUI 调用 PHPhotoLibrary 的 presentLimitedLibraryPicker 方法的正确方法是什么?
该方法需要一个 UIViewController,而我在 SwiftUI 中没有。
我尝试使用 UIViewControllerRepresentable 来创建一个 UIViewController,它可以工作,但结果是呈现了两个视图控制器,一个是我用 UIViewControllerRepresentable 创建的,另一个是有限的库选择器。
两个视图控制器都需要关闭才能到达原始屏幕,这是不可取的。
总结一下我看到的问题:
这是我的尝试(它显示了选择器,但是当您关闭它时,您也需要关闭额外的虚拟视图控制器:
import Foundation
import SwiftUI
import Photos
import PhotosUI
struct TestView: View {
@State var showLibraryPicker = false
var body: some View {
NavigationView {
VStack {
Button("Open Library Picker") { showLibraryPicker = true }
}
.navigationBarTitle("Test", displayMode: .inline)
.navigationViewStyle(StackNavigationViewStyle())
.sheet(isPresented: $showLibraryPicker, onDismiss: { print("Dismissed") }) …Run Code Online (Sandbox Code Playgroud) ios ×3
core-image ×1
ios9 ×1
ipad ×1
iphone ×1
memory-leaks ×1
objective-c ×1
opengl-es ×1
photosui ×1
swiftui ×1
xcode ×1