diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.mm b/ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.mm index fb3a03ca1d..e241609235 100644 --- a/ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.mm +++ b/ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.mm @@ -1651,6 +1651,7 @@ + (double)getLayoutTime:(NSString*)pageId { + (void)closePage:(NSString*)pageId { if (platformBridge) { + platformBridge->core_side()->DestroyInstance([pageId UTF8String]); platformBridge->core_side()->OnInstanceClose([pageId UTF8String] ?: ""); } } diff --git a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m index 1824b13832..adc62939c6 100644 --- a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m +++ b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m @@ -795,7 +795,11 @@ - (void)destroyInstance [WXPrerenderManager removePrerenderTaskforUrl:[self.scriptURL absoluteString]]; [WXPrerenderManager destroyTask:self.instanceId]; - [[WXSDKManager bridgeMgr] destroyInstance:self.instanceId]; + BOOL dataRender = self.dataRender; + BOOL wlasmRender = self.wlasmRender; + if (!dataRender) { + [[WXSDKManager bridgeMgr] destroyInstance:self.instanceId]; + } WXComponentManager* componentManager = self.componentManager; NSString* instanceId = self.instanceId; @@ -813,6 +817,10 @@ - (void)destroyInstance // Destroy weexcore c++ page and objects. [WXCoreBridge closePage:instanceId]; + if (dataRender && !wlasmRender) { + [[WXSDKManager bridgeMgr] destroyInstance:instanceId]; + } + // Destroy heron render target page if ([WXCustomPageBridge isCustomPage:instanceId]) { [[WXCustomPageBridge sharedInstance] removePage:instanceId]; diff --git a/weex_core/Source/core/bridge/platform/core_side_in_platform.cpp b/weex_core/Source/core/bridge/platform/core_side_in_platform.cpp index 6c749b3c10..34d1e49d29 100644 --- a/weex_core/Source/core/bridge/platform/core_side_in_platform.cpp +++ b/weex_core/Source/core/bridge/platform/core_side_in_platform.cpp @@ -55,10 +55,6 @@ void CoreSideInPlatform::SetDefaultHeightAndWidthIntoRootDom( } void CoreSideInPlatform::OnInstanceClose(const std::string &instance_id) { - auto handler = EagleBridge::GetInstance()->data_render_handler(); - if (handler) { - handler->DestroyInstance(instance_id.c_str()); - } RenderManager::GetInstance()->ClosePage(instance_id); } @@ -604,13 +600,17 @@ std::unique_ptr CoreSideInPlatform::ExecJSOnInstance(const char *i int CoreSideInPlatform::DestroyInstance(const char *instanceId) { auto handler = EagleBridge::GetInstance()->data_render_handler(); - if(handler!=nullptr){ + if (handler != nullptr) { handler->DestroyInstance(instanceId); } if (JsonRenderManager::GetInstance()->ClosePage(instanceId)) { return true; } - return WeexCoreManager::Instance()->script_bridge()->script_side()->DestroyInstance(instanceId); + auto script_side = WeexCoreManager::Instance()->script_bridge()->script_side(); + if (script_side) { + return script_side->DestroyInstance(instanceId); + } + return true; } int CoreSideInPlatform::UpdateGlobalConfig(const char *config) {