管理CommonJS模块的问题

我正在使用Titanium Appcelerator来使用JavaScript开发应用程序。 他们建议使用CommonJS方法。 关于CommonJS的简单例子可以在这里找到。

对于我的生活,我仍然无法弄清楚如何构建我的代码。

例:

/* Homescreen.js */
exports.createHomescreen = function () {

    //load all required modules first
    var videoPlayer = require('ui/videoPlayerModule');

    var self = Ti.UI.createWindow({
        width:'100%',
        height:'100%'
    })

    var newPlayer = videoPlayer.createPlayer({
        width:100
        height:50
    });

    self.add(newPlayer);
    return self;
}

videoPlayerModule

/* videoPlayerModule.js */
exports.createPlayer = function (object) {

    //load all required modules first
    var self = Ti.UI.createWindow({
        width:object.width,
        height:object.height
    });

    var exitVideoButton = Ti.UI.createButton({
        width:100,
        height:50
    });

    exitVideoButton.addEventListener('click',function(e){
        self.close();    //When this window is closed, the memory isn't freed.
        self = null;     //Still the memory isn't cleared
    });

    self.add(exitVideoButton);

    return(self);
}

我有内存分配问题,因为每当我加载videoPlayer并关闭它,内存永远不会被清除。 如果我再次打开videoPlayer,则会再次分配内存。 因此,每次启动videoPlayer时,我的应用程序的内存使用量都会增加。

我知道我的思维方式不对。 我在这里忽略了很简单的事情。 任何人都可以让我知道我不正确的做法吗?


这是因为您正在将Ti.UI.Window (从videoPlayerModule.js创建)添加到另一个Ti.UI.Window (在Homescreen.js中),您不应该这样做。 Ti.UI.Window是一个基本的容器对象,你永远不会将它添加到任何东西(通常),所以当你关闭这个窗口时,它仍然作为容器窗口的一个子对象被引用,所以它永远不会消失。 你的self = null; 在这一点上什么都不做。

你需要用视图替换视频播放器中的窗口,我会尝试这样的:

/* videoPlayerModule.js */
exports.createPlayer = function (object) {

    var self = Ti.UI.createView({
        width:object.width,
        height:object.height
    });

    var exitVideoButton = Ti.UI.createButton({
        width:100,
        height:50
    });

    exitVideoButton.addEventListener('click',function(e){
        self.hide();
    });

    self.add(exitVideoButton);

    return(self);
}

这不是一个完整的解决方案,因为你仍然会在内存中看到视图,但是它是一个非常小的空间,然后是完整的窗口,更好的方法是创建一次,然后show()hide()它在主屏幕上下文中需要时,另一种方式是传递父级,然后在退出时从父级移除该视图,但这样可以解决内存问题。

链接地址: http://www.djcxy.com/p/96605.html

上一篇: Problems managing CommonJS modules

下一篇: CommonJS for OOP in Appcelerator Titanium