Feature/zpf (#564)
* iOS: fix memory leak of blur effect * js: fix callback cause memory leak
This commit is contained in:
parent
c60754c53d
commit
be4fb05f91
@ -73,14 +73,22 @@ class CounterView extends ViewHolder {
|
|||||||
class CounterVM extends ViewModel<CountModel, CounterView> {
|
class CounterVM extends ViewModel<CountModel, CounterView> {
|
||||||
onAttached(s: CountModel, vh: CounterView) {
|
onAttached(s: CountModel, vh: CounterView) {
|
||||||
vh.counter.onClick = () => {
|
vh.counter.onClick = () => {
|
||||||
Promise.resolve(this.getState().count).then(count => {
|
setInterval(() => {
|
||||||
Promise.resolve().then(() => {
|
// this.updateState(state => {
|
||||||
this.updateState((state) => {
|
// state.count++
|
||||||
state.count = count + 1;
|
// })
|
||||||
});
|
this.context.callNative("demo", "test2", "sdfsf")
|
||||||
})
|
//loge("setInterval")
|
||||||
})
|
}, 1)
|
||||||
};
|
};
|
||||||
|
vh.number.onClick = () => {
|
||||||
|
setInterval(() => {
|
||||||
|
// this.updateState(state => {
|
||||||
|
// state.count++
|
||||||
|
// })
|
||||||
|
this.context.callNative("demo", "test")
|
||||||
|
}, 1)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
onBind(s: CountModel, vh: CounterView) {
|
onBind(s: CountModel, vh: CounterView) {
|
||||||
vh.number.text = `${s.count}`;
|
vh.number.text = `${s.count}`;
|
||||||
|
@ -11,8 +11,11 @@ @interface DoricDemoPlugin : DoricNativePlugin
|
|||||||
|
|
||||||
@implementation DoricDemoPlugin
|
@implementation DoricDemoPlugin
|
||||||
- (void)test {
|
- (void)test {
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)test2:(NSString *)val withPromise:(DoricPromise *)promise {
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
ShowToast(@"Test called", DoricGravityCenter);
|
[promise resolve:nil];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@end
|
@end
|
||||||
|
@ -46,10 +46,7 @@ - (void)viewDidLoad {
|
|||||||
[Doric registerLibrary:[DemoLibrary new]];
|
[Doric registerLibrary:[DemoLibrary new]];
|
||||||
[Doric enablePerformance:YES];
|
[Doric enablePerformance:YES];
|
||||||
[Doric enableRenderSnapshot:YES];
|
[Doric enableRenderSnapshot:YES];
|
||||||
}
|
|
||||||
|
|
||||||
- (void)viewDidAppear:(BOOL)animated {
|
|
||||||
[super viewDidAppear:animated];
|
|
||||||
[self.view addSubview:[[UITableView new] also:^(UITableView *it) {
|
[self.view addSubview:[[UITableView new] also:^(UITableView *it) {
|
||||||
it.width = self.view.width;
|
it.width = self.view.width;
|
||||||
it.height = self.view.height;
|
it.height = self.view.height;
|
||||||
@ -59,6 +56,10 @@ - (void)viewDidAppear:(BOOL)animated {
|
|||||||
}]];
|
}]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)viewDidAppear:(BOOL)animated {
|
||||||
|
[super viewDidAppear:animated];
|
||||||
|
}
|
||||||
|
|
||||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
|
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
|
||||||
return self.demoFilePaths.count;
|
return self.demoFilePaths.count;
|
||||||
}
|
}
|
||||||
|
@ -29,10 +29,12 @@ @interface DoricBlurEffectView : UIVisualEffectView
|
|||||||
@implementation DoricBlurEffectView
|
@implementation DoricBlurEffectView
|
||||||
- (instancetype)initWithEffect:(UIVisualEffect *)effect {
|
- (instancetype)initWithEffect:(UIVisualEffect *)effect {
|
||||||
if (self = [super initWithEffect:effect]) {
|
if (self = [super initWithEffect:effect]) {
|
||||||
|
__weak typeof(self) weakSelf = self;
|
||||||
_animator = [[UIViewPropertyAnimator alloc]
|
_animator = [[UIViewPropertyAnimator alloc]
|
||||||
initWithDuration:1
|
initWithDuration:1
|
||||||
curve:UIViewAnimationCurveLinear
|
curve:UIViewAnimationCurveLinear
|
||||||
animations:^{
|
animations:^{
|
||||||
|
__strong typeof(weakSelf) self = weakSelf;
|
||||||
self.effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
|
self.effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
|
||||||
}];
|
}];
|
||||||
_animator.fractionComplete = MIN(1, MAX(0, 15.0f / 200));
|
_animator.fractionComplete = MIN(1, MAX(0, 15.0f / 200));
|
||||||
@ -52,9 +54,6 @@ - (void)setRadius:(NSUInteger)radius {
|
|||||||
self.animator.fractionComplete = MIN(1, MAX(0, (radius / 200.f)));
|
self.animator.fractionComplete = MIN(1, MAX(0, (radius / 200.f)));
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)dealloc {
|
|
||||||
[self.animator stopAnimation:YES];
|
|
||||||
}
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface DoricBlurEffectViewNode ()
|
@interface DoricBlurEffectViewNode ()
|
||||||
@ -90,4 +89,8 @@ - (void)blendView:(UIView *)view forPropName:(NSString *)name propValue:(id)prop
|
|||||||
[super blendView:view forPropName:name propValue:prop];
|
[super blendView:view forPropName:name propValue:prop];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)dealloc {
|
||||||
|
[self.visualEffectView.animator stopAnimation:YES];
|
||||||
|
};
|
||||||
@end
|
@end
|
||||||
|
@ -17203,6 +17203,7 @@ var doric = (function (exports) {
|
|||||||
}
|
}
|
||||||
hookBeforeNativeCall(context);
|
hookBeforeNativeCall(context);
|
||||||
Reflect.apply(callback.resolve, context, argumentsList);
|
Reflect.apply(callback.resolve, context, argumentsList);
|
||||||
|
context.callbacks.delete(callbackId);
|
||||||
}
|
}
|
||||||
function jsCallReject(contextId, callbackId, args) {
|
function jsCallReject(contextId, callbackId, args) {
|
||||||
var arguments$1 = arguments;
|
var arguments$1 = arguments;
|
||||||
@ -17223,6 +17224,7 @@ var doric = (function (exports) {
|
|||||||
}
|
}
|
||||||
hookBeforeNativeCall(context);
|
hookBeforeNativeCall(context);
|
||||||
Reflect.apply(callback.reject, context.entity, argumentsList);
|
Reflect.apply(callback.reject, context.entity, argumentsList);
|
||||||
|
context.callbacks.delete(callbackId);
|
||||||
}
|
}
|
||||||
var Context = /** @class */ (function () {
|
var Context = /** @class */ (function () {
|
||||||
function Context(id) {
|
function Context(id) {
|
||||||
|
@ -1247,6 +1247,9 @@ var doric = (function (exports) {
|
|||||||
}
|
}
|
||||||
hookBeforeNativeCall(context);
|
hookBeforeNativeCall(context);
|
||||||
Reflect.apply(callback.resolve, context, argumentsList);
|
Reflect.apply(callback.resolve, context, argumentsList);
|
||||||
|
if (callback.retained !== true) {
|
||||||
|
context.callbacks.delete(callbackId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
function jsCallReject(contextId, callbackId, args) {
|
function jsCallReject(contextId, callbackId, args) {
|
||||||
const context = gContexts.get(contextId);
|
const context = gContexts.get(contextId);
|
||||||
@ -1265,6 +1268,9 @@ var doric = (function (exports) {
|
|||||||
}
|
}
|
||||||
hookBeforeNativeCall(context);
|
hookBeforeNativeCall(context);
|
||||||
Reflect.apply(callback.reject, context.entity, argumentsList);
|
Reflect.apply(callback.reject, context.entity, argumentsList);
|
||||||
|
if (callback.retained !== true) {
|
||||||
|
context.callbacks.delete(callbackId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
class Context {
|
class Context {
|
||||||
constructor(id) {
|
constructor(id) {
|
||||||
@ -1328,7 +1334,8 @@ var doric = (function (exports) {
|
|||||||
const functionId = uniqueId('function');
|
const functionId = uniqueId('function');
|
||||||
this.callbacks.set(functionId, {
|
this.callbacks.set(functionId, {
|
||||||
resolve: func,
|
resolve: func,
|
||||||
reject: () => { loge("This should not be called"); }
|
reject: () => { loge("This should not be called"); },
|
||||||
|
retained: true,
|
||||||
});
|
});
|
||||||
return functionId;
|
return functionId;
|
||||||
}
|
}
|
||||||
|
@ -1258,6 +1258,9 @@ function jsCallResolve(contextId, callbackId, args) {
|
|||||||
}
|
}
|
||||||
hookBeforeNativeCall(context);
|
hookBeforeNativeCall(context);
|
||||||
Reflect.apply(callback.resolve, context, argumentsList);
|
Reflect.apply(callback.resolve, context, argumentsList);
|
||||||
|
if (callback.retained !== true) {
|
||||||
|
context.callbacks.delete(callbackId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
function jsCallReject(contextId, callbackId, args) {
|
function jsCallReject(contextId, callbackId, args) {
|
||||||
const context = gContexts.get(contextId);
|
const context = gContexts.get(contextId);
|
||||||
@ -1276,6 +1279,9 @@ function jsCallReject(contextId, callbackId, args) {
|
|||||||
}
|
}
|
||||||
hookBeforeNativeCall(context);
|
hookBeforeNativeCall(context);
|
||||||
Reflect.apply(callback.reject, context.entity, argumentsList);
|
Reflect.apply(callback.reject, context.entity, argumentsList);
|
||||||
|
if (callback.retained !== true) {
|
||||||
|
context.callbacks.delete(callbackId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
class Context {
|
class Context {
|
||||||
constructor(id) {
|
constructor(id) {
|
||||||
@ -1339,7 +1345,8 @@ class Context {
|
|||||||
const functionId = uniqueId('function');
|
const functionId = uniqueId('function');
|
||||||
this.callbacks.set(functionId, {
|
this.callbacks.set(functionId, {
|
||||||
resolve: func,
|
resolve: func,
|
||||||
reject: () => { loge("This should not be called"); }
|
reject: () => { loge("This should not be called"); },
|
||||||
|
retained: true,
|
||||||
});
|
});
|
||||||
return functionId;
|
return functionId;
|
||||||
}
|
}
|
||||||
|
1
doric-js/lib/src/runtime/sandbox.d.ts
vendored
1
doric-js/lib/src/runtime/sandbox.d.ts
vendored
@ -7,6 +7,7 @@ export declare class Context {
|
|||||||
callbacks: Map<string, {
|
callbacks: Map<string, {
|
||||||
resolve: Function;
|
resolve: Function;
|
||||||
reject: Function;
|
reject: Function;
|
||||||
|
retained?: boolean;
|
||||||
}>;
|
}>;
|
||||||
classes: Map<string, ClassType<object>>;
|
classes: Map<string, ClassType<object>>;
|
||||||
hookBeforeNativeCall(): void;
|
hookBeforeNativeCall(): void;
|
||||||
|
@ -45,6 +45,9 @@ export function jsCallResolve(contextId, callbackId, args) {
|
|||||||
}
|
}
|
||||||
hookBeforeNativeCall(context);
|
hookBeforeNativeCall(context);
|
||||||
Reflect.apply(callback.resolve, context, argumentsList);
|
Reflect.apply(callback.resolve, context, argumentsList);
|
||||||
|
if (callback.retained !== true) {
|
||||||
|
context.callbacks.delete(callbackId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
export function jsCallReject(contextId, callbackId, args) {
|
export function jsCallReject(contextId, callbackId, args) {
|
||||||
const context = gContexts.get(contextId);
|
const context = gContexts.get(contextId);
|
||||||
@ -63,6 +66,9 @@ export function jsCallReject(contextId, callbackId, args) {
|
|||||||
}
|
}
|
||||||
hookBeforeNativeCall(context);
|
hookBeforeNativeCall(context);
|
||||||
Reflect.apply(callback.reject, context.entity, argumentsList);
|
Reflect.apply(callback.reject, context.entity, argumentsList);
|
||||||
|
if (callback.retained !== true) {
|
||||||
|
context.callbacks.delete(callbackId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
export class Context {
|
export class Context {
|
||||||
constructor(id) {
|
constructor(id) {
|
||||||
@ -126,7 +132,8 @@ export class Context {
|
|||||||
const functionId = uniqueId('function');
|
const functionId = uniqueId('function');
|
||||||
this.callbacks.set(functionId, {
|
this.callbacks.set(functionId, {
|
||||||
resolve: func,
|
resolve: func,
|
||||||
reject: () => { loge("This should not be called"); }
|
reject: () => { loge("This should not be called"); },
|
||||||
|
retained: true,
|
||||||
});
|
});
|
||||||
return functionId;
|
return functionId;
|
||||||
}
|
}
|
||||||
|
@ -84,6 +84,9 @@ export function jsCallResolve(contextId: string, callbackId: string, args?: any)
|
|||||||
}
|
}
|
||||||
hookBeforeNativeCall(context)
|
hookBeforeNativeCall(context)
|
||||||
Reflect.apply(callback.resolve, context, argumentsList)
|
Reflect.apply(callback.resolve, context, argumentsList)
|
||||||
|
if (callback.retained !== true) {
|
||||||
|
context.callbacks.delete(callbackId)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function jsCallReject(contextId: string, callbackId: string, args?: any) {
|
export function jsCallReject(contextId: string, callbackId: string, args?: any) {
|
||||||
@ -103,12 +106,15 @@ export function jsCallReject(contextId: string, callbackId: string, args?: any)
|
|||||||
}
|
}
|
||||||
hookBeforeNativeCall(context)
|
hookBeforeNativeCall(context)
|
||||||
Reflect.apply(callback.reject, context.entity, argumentsList)
|
Reflect.apply(callback.reject, context.entity, argumentsList)
|
||||||
|
if (callback.retained !== true) {
|
||||||
|
context.callbacks.delete(callbackId)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class Context {
|
export class Context {
|
||||||
entity: any
|
entity: any
|
||||||
id: string
|
id: string
|
||||||
callbacks: Map<string, { resolve: Function, reject: Function }> = new Map
|
callbacks: Map<string, { resolve: Function, reject: Function, retained?: boolean }> = new Map
|
||||||
classes: Map<string, ClassType<object>> = new Map
|
classes: Map<string, ClassType<object>> = new Map
|
||||||
|
|
||||||
hookBeforeNativeCall() {
|
hookBeforeNativeCall() {
|
||||||
@ -144,7 +150,8 @@ export class Context {
|
|||||||
const functionId = uniqueId('function')
|
const functionId = uniqueId('function')
|
||||||
this.callbacks.set(functionId, {
|
this.callbacks.set(functionId, {
|
||||||
resolve: func,
|
resolve: func,
|
||||||
reject: () => { loge("This should not be called") }
|
reject: () => { loge("This should not be called") },
|
||||||
|
retained: true,
|
||||||
})
|
})
|
||||||
return functionId
|
return functionId
|
||||||
}
|
}
|
||||||
|
@ -95,6 +95,9 @@ export function jsCallResolve(contextId: string, callbackId: string, args?: any)
|
|||||||
}
|
}
|
||||||
hookBeforeNativeCall(context)
|
hookBeforeNativeCall(context)
|
||||||
Reflect.apply(callback.resolve, context, argumentsList)
|
Reflect.apply(callback.resolve, context, argumentsList)
|
||||||
|
if (callback.retained !== true) {
|
||||||
|
context.callbacks.delete(callbackId)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function jsCallReject(contextId: string, callbackId: string, args?: any) {
|
export function jsCallReject(contextId: string, callbackId: string, args?: any) {
|
||||||
@ -114,12 +117,15 @@ export function jsCallReject(contextId: string, callbackId: string, args?: any)
|
|||||||
}
|
}
|
||||||
hookBeforeNativeCall(context)
|
hookBeforeNativeCall(context)
|
||||||
Reflect.apply(callback.reject, context.entity, argumentsList)
|
Reflect.apply(callback.reject, context.entity, argumentsList)
|
||||||
|
if (callback.retained !== true) {
|
||||||
|
context.callbacks.delete(callbackId)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class Context {
|
export class Context {
|
||||||
entity: any
|
entity: any
|
||||||
id: string
|
id: string
|
||||||
callbacks: Map<string, { resolve: Function, reject: Function }> = new Map
|
callbacks: Map<string, { resolve: Function, reject: Function, retained?: boolean }> = new Map
|
||||||
classes: Map<string, ClassType<object>> = new Map
|
classes: Map<string, ClassType<object>> = new Map
|
||||||
|
|
||||||
hookBeforeNativeCall() {
|
hookBeforeNativeCall() {
|
||||||
@ -182,7 +188,8 @@ export class Context {
|
|||||||
const functionId = uniqueId('function')
|
const functionId = uniqueId('function')
|
||||||
this.callbacks.set(functionId, {
|
this.callbacks.set(functionId, {
|
||||||
resolve: func,
|
resolve: func,
|
||||||
reject: () => { loge("This should not be called") }
|
reject: () => { loge("This should not be called") },
|
||||||
|
retained: true,
|
||||||
})
|
})
|
||||||
return functionId
|
return functionId
|
||||||
}
|
}
|
||||||
|
2
doric-web/dist/index.js
vendored
2
doric-web/dist/index.js
vendored
@ -1252,6 +1252,7 @@ var doric = (function (exports) {
|
|||||||
}
|
}
|
||||||
hookBeforeNativeCall(context);
|
hookBeforeNativeCall(context);
|
||||||
Reflect.apply(callback.resolve, context, argumentsList);
|
Reflect.apply(callback.resolve, context, argumentsList);
|
||||||
|
context.callbacks.delete(callbackId);
|
||||||
}
|
}
|
||||||
function jsCallReject(contextId, callbackId, args) {
|
function jsCallReject(contextId, callbackId, args) {
|
||||||
const context = gContexts.get(contextId);
|
const context = gContexts.get(contextId);
|
||||||
@ -1270,6 +1271,7 @@ var doric = (function (exports) {
|
|||||||
}
|
}
|
||||||
hookBeforeNativeCall(context);
|
hookBeforeNativeCall(context);
|
||||||
Reflect.apply(callback.reject, context.entity, argumentsList);
|
Reflect.apply(callback.reject, context.entity, argumentsList);
|
||||||
|
context.callbacks.delete(callbackId);
|
||||||
}
|
}
|
||||||
class Context {
|
class Context {
|
||||||
constructor(id) {
|
constructor(id) {
|
||||||
|
2
doric-web/dist/index.js.map
vendored
2
doric-web/dist/index.js.map
vendored
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user