diff --git a/shared/darwin/TextureRenderer.mm b/shared/darwin/TextureRenderer.mm index 47269e380..15d69d2c3 100644 --- a/shared/darwin/TextureRenderer.mm +++ b/shared/darwin/TextureRenderer.mm @@ -208,6 +208,14 @@ - (void)dispose { } - (void)dealloc { + if (self.irisRtcRendering) { + // the delegateId is garenteed to be auto incremented, so we can just remove + // the delegate by the id, no need to check if the delegate is still valid + // or is belong to this TextureRender + self.irisRtcRendering->RemoveVideoFrameObserverDelegate(self.delegateId); + self.irisRtcRendering = nil; + } + dispatch_sync(self.pixelBufferSynchronizationQueue, ^{ if (self.latestPixelBuffer) { CVPixelBufferRelease(self.latestPixelBuffer); diff --git a/shared/darwin/VideoViewController.mm b/shared/darwin/VideoViewController.mm index d2da643c2..3b860dcfa 100644 --- a/shared/darwin/VideoViewController.mm +++ b/shared/darwin/VideoViewController.mm @@ -246,4 +246,11 @@ - (void)dispose { [self.textureRenders removeAllObjects]; } +// - (void)dealloc { +// // do not do this, coz TextureRender::TextureRender will call +// // [textureRegistry unregisterTexture] which may already been dealloced by +// // flutter and will bring crash +// // [self dispose]; +// } + @end