DoricContext auto release in iOS

This commit is contained in:
pengfei.zhou
2019-07-29 14:51:35 +08:00
parent 2a53b24aff
commit 0371cde9d1
28 changed files with 630 additions and 537 deletions

View File

@@ -43,18 +43,22 @@ - (id)getResult {
return self.result;
}
- (void)setResultCallback:(DoricResultCallback)callback exceptionCallback:(DoricExceptionCallback)exceptionCallback {
self.resultCallback = callback;
self.exceptionCallback = exceptionCallback;
- (void)setResultCallback:(DoricResultCallback)callback {
_resultCallback = callback;
if(self.result && ![self.result isKindOfClass: [NSException class]]){
callback(self.result);
}
}
- (void)setExceptionCallback:(DoricExceptionCallback)exceptionCallback {
_exceptionCallback = exceptionCallback;
if([self.result isKindOfClass: [NSException class]]){
self.exceptionCallback(self.result);
}else if(self.result){
self.resultCallback(self.result);
exceptionCallback(self.result);
}
}
- (void)setFinishCallback:(DoricFinishCallback)callback {
self.finishCallback = callback;
_finishCallback = callback;
if(self.result){
callback();
}

View File

@@ -6,10 +6,14 @@
//
#import <Foundation/Foundation.h>
#import "DoricContext.h"
NS_ASSUME_NONNULL_BEGIN
@interface DoricComponent : NSObject
@property (nonatomic,strong) DoricContext *doricContext;
- (instancetype)initWithContext:(DoricContext *)doricContext;
@end
NS_ASSUME_NONNULL_END

View File

@@ -9,4 +9,11 @@
@implementation DoricComponent
- (instancetype)initWithContext:(DoricContext *)doricContext {
if(self = [super init]){
_doricContext = doricContext;
}
return self;
}
@end

View File

@@ -39,7 +39,7 @@
"},this,[{exports:{}}])"
"])";
NSString * const TEMPLATE_CONTEXT_DESTROY = @"doric.jsRelease(\"%@\"";
NSString * const TEMPLATE_CONTEXT_DESTROY = @"doric.jsReleaseContext(\"%@\")";
NSString * const GLOBAL_DORIC = @"doric";

View File

@@ -10,16 +10,13 @@
@implementation DoricContext
- (instancetype)init {
- (instancetype)initWithScript:(NSString *)script source:(NSString *)source {
if(self = [super init]){
_driver = [DoricDriver instance];
[[DoricContextManager instance] createContext:self script:script source:source];
}
return self;
}
- (instancetype)initWithScript:(NSString *)script source:(NSString *)source {
return [[DoricContextManager instance] createContext:script source:source];
}
- (void)dealloc {
[[DoricContextManager instance] destroyContext:self];

View File

@@ -11,11 +11,11 @@
NS_ASSUME_NONNULL_BEGIN
@interface DoricContextManager : NSObject
+ (instancetype) instance;
+ (instancetype)instance;
- (DoricContext *)createContext:(NSString *)script source:(NSString *)source;
- (void)createContext:(DoricContext *)context script:(NSString *)script source:(NSString *)source;
- (void) destroyContext:(DoricContext *)context;
- (void)destroyContext:(DoricContext *)context;
@end
NS_ASSUME_NONNULL_END

View File

@@ -35,17 +35,17 @@ + (instancetype)instance{
return _instance;
}
- (DoricContext *)createContext:(NSString *)script source:(NSString *)source {
DoricContext *doricContext = [[DoricContext alloc] init];
doricContext.contextId = [NSString stringWithFormat:@"%ld", (long)self.counter++];
[doricContext.driver createContext:doricContext.contextId script:script source:source];
- (void)createContext:(DoricContext *)context script:(NSString *)script source:(NSString *)source {
context.contextId = [NSString stringWithFormat:@"%ld", (long)self.counter++];
[context.driver createContext:context.contextId script:script source:source];
dispatch_sync(self.mapQueue, ^(){
[self.doricContextMap setValue:doricContext forKey:doricContext.contextId];
NSValue *value = [NSValue valueWithNonretainedObject:context];
[self.doricContextMap setValue:value forKey:context.contextId];
});
return doricContext;
}
- (void) destroyContext:(DoricContext *)context {
- (void)destroyContext:(DoricContext *)context {
NSString *contextId = context.contextId;
[[context.driver destroyContext:contextId] setFinishCallback:^(){
dispatch_sync(self.mapQueue, ^(){

View File

@@ -6,10 +6,10 @@
//
#import <Foundation/Foundation.h>
#import "DoricComponent.h"
NS_ASSUME_NONNULL_BEGIN
@interface DoricNativePlugin : NSObject
@interface DoricNativePlugin : DoricComponent
@end