在iOS中调用CIContext.FromOptions崩溃

时间:2016-10-13 21:43:05

标签: xamarin.ios

在我的Xamarin iOS应用程序中,我不断收到需要转换为CGImage实例的CIImage实例。以下是相关代码:

CIContext cicontext = CIContext.FromOptions(null);
CGImage cgimage = cicontext.CreateCGImage(ciimage, ciimage.Extent);
...
cgimage.Dispose();
cicontext.Dispose();

前100个左右的电话可以正常工作。在那之后,我在应用程序中崩溃了。这是堆栈跟踪:

critical:   2   libsystem_platform.dylib            0x21866077 _sigtramp + 42
critical:   3   CoreImage                           0x24a352b9 <redacted> + 64
critical:   4   CoreImage                           0x24a6c005 <redacted> + 292
critical:   5   CoreImage                           0x24a6c237 <redacted> + 18
critical:   6   CoreImage                           0x24a4b431 <redacted> + 512
critical:   7   CoreImage                           0x24a47d5b <redacted> + 734
critical:   8   CoreImage                           0x24a47a55 <redacted> + 52
critical:   9   MyApp                               0x00fa4eb4 wrapper_managed_to_native_ObjCRuntime_Messaging_IntPtr_objc_msgSend_IntPtr_intptr_intptr_intptr + 108
critical:   10  MyApp                               0x00f41a5c CoreImage_CIContext_FromOptions_Foundation_NSDictionary + 120
critical:   11  MyApp                               0x00f41868 CoreImage_CIContext_FromOptions_CoreImage_CIContextOptions + 48

基本上,CIContext.FromOptions中的某些逻辑会导致崩溃。

现在,我已经使cicontext对象成为一个初始化一次的静态变量。这似乎照顾了崩溃。但是,如果您有任何见解,我将不胜感激。问候。

1 个答案:

答案 0 :(得分:0)

对于遇到此问题的人,此修复程序适用于我们:

  1. 只需调用cicontext = CIContext.FromOptions(null)一次并保持返回值,作为成员变量或静态变量。
  2. 致电CreateCGImage致电cicontext.ClearCaches()后。如果不这样做,你最终会耗尽内存。
  3. 希望这会有所帮助。问候。