DoricContext auto release in iOS
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -9,4 +9,11 @@
|
||||
|
||||
@implementation DoricComponent
|
||||
|
||||
- (instancetype)initWithContext:(DoricContext *)doricContext {
|
||||
if(self = [super init]){
|
||||
_doricContext = doricContext;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
@end
|
||||
|
@@ -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";
|
||||
|
||||
|
@@ -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];
|
||||
|
@@ -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
|
||||
|
@@ -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, ^(){
|
||||
|
@@ -6,10 +6,10 @@
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "DoricComponent.h"
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface DoricNativePlugin : NSObject
|
||||
@interface DoricNativePlugin : DoricComponent
|
||||
|
||||
@end
|
||||
|
||||
|
Reference in New Issue
Block a user