Skip to content

Commit

Permalink
fix(all): memory leaks
Browse files Browse the repository at this point in the history
fixes #10459
fixes #10416
fixes #10286
  • Loading branch information
manucorporat committed Feb 28, 2017
1 parent be0b6a8 commit 8d9f374
Show file tree
Hide file tree
Showing 13 changed files with 25 additions and 21 deletions.
1 change: 1 addition & 0 deletions src/components/action-sheet/action-sheet-component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,7 @@ export class ActionSheetCmp {

ngOnDestroy() {
assert(this.gestureBlocker.blocked === false, 'gesture blocker must be already unblocked');
this.d = null;
this.gestureBlocker.destroy();
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/components/menu/menu.ts
Original file line number Diff line number Diff line change
Expand Up @@ -516,7 +516,7 @@ export class Menu {
this.isOpen = isOpen;
this._isAnimating = false;

this._events.destroy();
this._events.unlistenAll();
if (isOpen) {
// Disable swipe to go back gesture
this._gestureBlocker.block();
Expand Down
1 change: 1 addition & 0 deletions src/components/refresher/refresher.ts
Original file line number Diff line number Diff line change
Expand Up @@ -503,6 +503,7 @@ export class Refresher {
* @private
*/
ngOnDestroy() {
this._events.destroy();
this._gesture.destroy();
this._setListeners(false);
}
Expand Down
3 changes: 1 addition & 2 deletions src/components/tabs/tabs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -411,6 +411,7 @@ export class Tabs extends Ion implements AfterViewInit {
if (opts.updateUrl !== false) {
this._linker.navChange(DIRECTION_SWITCH);
}
assert(this.getSelected() === selectedTab, 'selected tab does not match');
this._fireChangeEvent(selectedTab);
});
} else {
Expand All @@ -419,8 +420,6 @@ export class Tabs extends Ion implements AfterViewInit {
}

_fireChangeEvent(selectedTab: Tab) {
assert(this.getSelected() === selectedTab, 'selected tab does not match');

selectedTab.ionSelect.emit(selectedTab);
this.ionChange.emit(selectedTab);
}
Expand Down
5 changes: 3 additions & 2 deletions src/gestures/drag-gesture.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ export class PanGesture {
unlisten() {
if (this.isListening) {
this.gestute && this.gestute.release();
this.events.destroy();
this.events.unlistenAll();
this.isListening = false;
}
}
Expand All @@ -71,7 +71,8 @@ export class PanGesture {
this.gestute && this.gestute.destroy();
this.gestute = null;
this.unlisten();
this.element = null;
this.events.destroy();
this.events = this.element = this.gestute = null;
}

pointerDown(ev: any): boolean {
Expand Down
7 changes: 6 additions & 1 deletion src/gestures/ui-event-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,15 @@ export class UIEventManager {
}
}

destroy() {
unlistenAll() {
this.evts.forEach(unRegEvent => {
unRegEvent();
});
this.evts.length = 0;
}

destroy() {
this.unlistenAll();
this.evts = null;
}
}
7 changes: 2 additions & 5 deletions src/navigation/nav-controller-base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -723,7 +723,7 @@ export class NavControllerBase extends Ion implements NavController {

if (transition.isRoot()) {
// this is the root transition
// it's save to destroy this transition
// it's safe to destroy this transition
this._trnsCtrl.destroy(transition.trnsId);

// it's safe to enable the app again
Expand Down Expand Up @@ -909,13 +909,10 @@ export class NavControllerBase extends Ion implements NavController {
view._destroy(this._renderer);
}

// purge stack
this._views.length = 0;

// release swipe back gesture and transition
this._sbGesture && this._sbGesture.destroy();
this._sbTrns && this._sbTrns.destroy();
this._sbGesture = this._sbTrns = null;
this._queue = this._views = this._sbGesture = this._sbTrns = null;

// Unregister navcontroller
if (this.parent && this.parent.unregisterChildNav) {
Expand Down
2 changes: 1 addition & 1 deletion src/navigation/view-controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -523,7 +523,7 @@ export class ViewController {
this._cmp.destroy();
}

this._nav = this._cmp = this.instance = this._cntDir = this._cntRef = this._hdrDir = this._ftrDir = this._nb = this._onDidDismiss = this._onWillDismiss = null;
this._nav = this._cmp = this.instance = this._cntDir = this._cntRef = this._leavingOpts = this._hdrDir = this._ftrDir = this._nb = this._onDidDismiss = this._onWillDismiss = null;
}

/**
Expand Down
4 changes: 0 additions & 4 deletions src/tap-click/ripple.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@ import { DomController } from '../platform/dom-controller';
* @private
*/
export class RippleActivator implements ActivatorBase {
protected _queue: HTMLElement[] = [];
protected _active: HTMLElement[] = [];
protected highlight: Activator;

constructor(app: App, config: Config, private dom: DomController) {
Expand Down Expand Up @@ -52,8 +50,6 @@ export class RippleActivator implements ActivatorBase {
return;
}

this._active.push(activatableEle);

var j = activatableEle.childElementCount;
while (j--) {
var rippleEle: any = activatableEle.children[j];
Expand Down
6 changes: 4 additions & 2 deletions src/tap-click/tap-click.ts
Original file line number Diff line number Diff line change
Expand Up @@ -221,11 +221,13 @@ export class TapClick {
}


function getActivatableTarget(ele: HTMLElement) {
function getActivatableTarget(ele: HTMLElement): any {
let targetEle = ele;
for (let x = 0; x < 10; x++) {
if (!targetEle) break;
if (isActivatable(targetEle)) return targetEle;
if (isActivatable(targetEle)) {
return targetEle;
}
targetEle = targetEle.parentElement;
}
return null;
Expand Down
1 change: 1 addition & 0 deletions src/transitions/page-transition.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ export class PageTransition extends Transition {

destroy() {
super.destroy();
this.enteringPage && this.enteringPage.destroy();
this.enteringPage = null;
}

Expand Down
5 changes: 3 additions & 2 deletions src/transitions/transition-controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,9 @@ export class TransitionController {
}

destroy(trnsId: number) {
if (this._trns[trnsId]) {
this._trns[trnsId].destroy();
const trans = this._trns[trnsId];
if (trans) {
trans.destroy();
delete this._trns[trnsId];
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/transitions/transition.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ export class Transition extends Animation {

destroy() {
super.destroy();
this.enteringView = this.leavingView = this._trnsStart = null;
this.parent = this.enteringView = this.leavingView = this._trnsStart = null;
}

}

0 comments on commit 8d9f374

Please sign in to comment.