系统 : iOS 13.3.1
机型: iPhone7
dispatch_async(_jsContextQueue, ^{
JSContext *jscontent = [[JSContext alloc] init];
[UIWebView class];
});
看代码,按照正常思维理解, [UIWebView class]是无论如何都不应崩溃的。
起初按照惯性思维去查找僵尸变量,忙活了半天没有定位。
最终定位结果如下:
在没有调用过UIWebView的任何函数时,先在非主线程调用UIWebView方法,则会导致崩溃
本文的相关代码如下
#import "ViewController.h"
#import <JavaScriptCore/JavaScriptCore.h>
@interface ViewController ()<UITableViewDelegate,UITableViewDataSource>
{
dispatch_queue_t _jsContextQueue;
}
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
_jsContextQueue = dispatch_queue_create("jscontext", NULL);
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
dispatch_async(_jsContextQueue, ^{
JSContext *jscontent = [[JSContext alloc] init];
[UIWebView class];
});
});
}
@end