JavaScriptCore で JSContext の作成に失敗しないようにする
Cocoa プログラミング
JavaScriptCore で頻繁に JSContext を作成していると、ときどき EXC_BAD_ACCESS が発生することがありました。
そんなときの対処法を見つけたので記しておきます。
JavaScriptCore を使っているとき、頻繁にJSContext
のインスタンスを作成しているとEXC_BAD_ACCESS
が発生することがあります。
このとき、あらかじめインスタンス変数にJSVirtualMachineクラス のインスタンスを用意しておいて、それを使ってJSContextクラス を作成することで、エラーが発生しなくなるようでした。
#import <JavaScriptCore/JavaScriptCore.h>
@interface EzBuilder : NSObject
@property (readonly,strong) JSVirtualMachine* vm;
- (void)build;
@end
@implementation EzBuilder
- (instancetype)init
{
self = [super init];
if (self)
{
_vm = [[JSVirtualMachine alloc] init];
}
return self;
}
- (void)build
{
JSContext* js = [[JSContext alloc] initWithVirtualMachine:self.vm];
:
}
@end
JSContext を何回か作成するような場合は、面倒でもこのようにinitWithVirtualMachine:メソッド を使って、使用する仮想マシンを明示的に指定するのが良さそうですね。