服务中的回调是否会保留范围并泄漏内存?

时间:2015-10-15 19:49:52

标签: angularjs memory-leaks

所以说例如我有一家工厂:

app.factory('exposeService', function() {
    var service = {};
    service.expose = function(name, callback) {
        service[name] = callback;
    };
    service.destroyExposed = function(name) {
        if (service[name]) {
            service[name] = null;
        }
    };
    return service;
})

这个工厂非常简单,它有两个方法来设置一个回调,另一个来销毁所述回调。控制器将使用此服务并“暴露”。其他服务现在可以直接调用的方法。这是一个例子:

app.controller("simpleController", ["exposeService", "$scope", function(exposeService, $scope) {
    var vm = this;
    vm.counter = 0;
    var exposedCallback = function() {
       console.log('This is what I need to access: ', vm);
       vm.counter++;
    };

    playerOverlayService.expose('exposedCallback', exposedCallback);

    $scope.$on('$destroy', function() {
        playerOverlayService.destroyExposed('onSystemMessage');
    });
}]);

只要服务决定适合调用回调,该控制器就需要递增计数器。现在我的问题是,如果我在销毁控制器时销毁对回调的引用,那么回调内的范围是否会泄漏内存,因为它不再被使用或引用?或者,destroyExposed方法是否足以告诉GC它可以清理?

0 个答案:

没有答案