Skip to content
This repository was archived by the owner on Jun 3, 2021. It is now read-only.

Commit bc252dc

Browse files
committed
[iOS] support jsTaskQueue thread safe
1 parent b333c98 commit bc252dc

File tree

1 file changed

+23
-13
lines changed

1 file changed

+23
-13
lines changed

ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ + (void)_performBlockOnBridgeThread:(void (^)(void))block
151151
if ([NSThread currentThread] == [self jsThread]) {
152152
block();
153153
} else {
154-
[self performSelector:@selector(_performBlockOnBridgeThread:instance:)
154+
[self performSelector:@selector(_performBlockOnBridgeThread:)
155155
onThread:[self jsThread]
156156
withObject:[block copy]
157157
waitUntilDone:NO];
@@ -205,12 +205,18 @@ + (void)_performBlockOnBackupBridgeThread:(void (^)(void))block putInTaskQueue:(
205205
return;
206206
}
207207
if (putInTaskQueue) {
208-
[[WXSDKManager bridgeMgr].jsTaskQueue addObject:block];
208+
[WXBridgeManager _performBlockOnBackupBridgeThread:^{
209+
[[WXSDKManager bridgeMgr].jsTaskQueue addObject:block];
210+
} putInTaskQueue:NO];
209211
} else {
210-
[self performSelector:@selector(_performBlockOnBridgeThread:instance:)
211-
onThread:[self backupJsThread]
212-
withObject:[block copy]
213-
waitUntilDone:NO];
212+
if ([NSThread currentThread] == [self backupJsThread]) {
213+
block();
214+
} else {
215+
[self performSelector:@selector(_performBlockOnBridgeThread:instance:)
216+
onThread:[self backupJsThread]
217+
withObject:[block copy]
218+
waitUntilDone:NO];
219+
}
214220
}
215221
}
216222

@@ -350,13 +356,17 @@ - (void)createInstance:(NSString *)instance
350356
}
351357

352358
- (void)executeJSTaskQueue {
353-
if (_jsTaskQueue.count == 0 || !_supportMultiJSThread) {
354-
return;
355-
}
356-
for (id block in _jsTaskQueue) {
357-
[WXBridgeManager _performBlockOnBackupBridgeThread:block putInTaskQueue:NO];
358-
}
359-
[_jsTaskQueue removeAllObjects];
359+
__weak typeof(self) weakSelf = self;
360+
[WXBridgeManager _performBlockOnBackupBridgeThread:^{
361+
if (weakSelf.jsTaskQueue.count == 0 || !weakSelf.supportMultiJSThread) {
362+
return;
363+
}
364+
for (id task in weakSelf.jsTaskQueue) {
365+
void (^block)(void) = task;
366+
block();
367+
}
368+
[weakSelf.jsTaskQueue removeAllObjects];
369+
} putInTaskQueue:NO];
360370
}
361371

362372
- (WXThreadSafeMutableArray *)instanceIdStack

0 commit comments

Comments
 (0)