iOS: optimize hot reload operation which causes render error

This commit is contained in:
pengfei.zhou 2022-08-01 15:30:31 +08:00 committed by osborn
parent 61e537aa98
commit f4fcb981b4
2 changed files with 12 additions and 8 deletions

View File

@ -107,18 +107,22 @@ - (void)build:(CGSize)size {
}
- (void)reload:(NSString *)script {
[self.driver destroyContext:self.contextId];
[[self.driver destroyContext:self.contextId] waitUntilResult];
self.rootNode.viewId = nil;
[self.rootNode clearSubModel];
[self.rootNode.view.subviews forEach:^(__kindof UIView *obj) {
[obj removeFromSuperview];
}];
self.script = script;
_destroyed = YES;
[self dispatchToMainQueue:^{
_destroyed = NO;
[self.driver createContext:self.contextId script:script source:self.source];
[self init:self.extra];
[self callEntity:DORIC_ENTITY_CREATE withArgumentsArray:@[]];
[self callEntity:DORIC_ENTITY_BUILD withArgumentsArray:@[self.initialParams]];
[self onShow];
}];
}
- (void)onShow {

View File

@ -41,7 +41,7 @@ - (instancetype)initWithContext:(DoricContext *)context callbackId:(NSString *)c
- (void)resolve:(id)result {
__weak typeof(self) __self = self;
if (self.context == nil) {
if (self.context == nil || self.context.destroyed) {
return;
}
[[self.context.driver invokeDoricMethod:DORIC_BRIDGE_RESOLVE
@ -58,7 +58,7 @@ - (void)resolve:(id)result {
- (void)reject:(id)result {
__weak typeof(self) __self = self;
if (self.context == nil) {
if (self.context == nil || self.context.destroyed) {
return;
}
[[self.context.driver invokeDoricMethod:DORIC_BRIDGE_REJECT