#xamarin.ios
#xamarin.ios
Вопрос:
В моем приложении Xamarin для iOS я постоянно получаю экземпляры CIImage, которые мне нужно преобразовать в экземпляр CGImage. Вот соответствующий код:
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:
Для тех, кто столкнулся с этой проблемой, это исправление сработало для нас:
- Вызовите
cicontext = CIContext.FromOptions(null)
только один раз и удерживайте возвращаемое значение либо как переменную-член, либо как статическую переменную. - После звонка
CreateCGImage
звонитеcicontext.ClearCaches()
. Если этого не сделать, у вас в конечном итоге закончится память.
Надеюсь, это поможет. С уважением.