请使用CommonJS推荐钛项目结构

时间:2012-02-27 00:59:46

标签: javascript ios titanium titanium-mobile commonjs

我正在开始一个新的Titanium应用程序,并且希望使用最佳实践并避免因此而导致内存泄漏。我是CommonJS以及Titanium平台的新手。

不幸的是,似乎钛的所有样本应用都围绕Ti.include("/lib/module")而不是require("/lib/module")的{​​{3}}。

我担心的是使用CommonJS的内存消耗可能需要。从newer recommended best practice它说明模块将被缓存,这是否意味着如果我访问一个模块,即使它们超出范围,所有这些函数突然停留在内存中?

我已经开始使用以下结构的新应用

/ctrl           # Model/UI controllers
/lib            # libraries (common + 3rd party)
/ui             # UI forms
/model          # DAL objects for data store

从这里我的主应用程序有一个仪表板样式视图,其结构松散如下:

(function() {
    var getMenuItem = require("/ui/main").getMenuItem;
    var win = Titanium.UI.createWindow({
        title:'Main',
        backgroundColor:'#fff'
    });
    var nav = Ti.UI.iPhone.createNavigationGroup({
        window:win
    });
    var sect;
    var data = [];
    sect = Ti.UI.createTableViewSection();
    data.push(sect);
    sect.add(getMenuItem("Customers",
        require("/ctrl/account").createCustMainWindow));
    sect.add(getMenuItem("Schedules",
        require("/ctrl/schedule").createScheduleMainWindow));
    sect.add(getMenuItem("Settings"));
    var menu = Titanium.UI.createTableView({
        style: Ti.UI.iPhone.TableViewStyle.GROUPED,
        data:data
    });
    win.add(menu);
    menu.addEventListener('click',function(e) {
        if (e.rowData.createWindow) {
            var win = e.rowData.createWindow(nav);
            nav.open(win);
        }
    });
    var navWindow = Titanium.UI.createWindow();
    navWindow.add(nav);
    navWindow.open();
})();

非常感谢任何关于正确项目结构的指导。

3 个答案:

答案 0 :(得分:2)

This是正在开发的社区应用程序,纯粹使用模块模式,也可以通过开发人员博客查找Forging系列,其中包含主要使用模块模式开发的样本

答案 1 :(得分:0)

我使用require(),并且在项目开始时我有一个很长的require() - 它可能是最大的Titanium项目之一。

我可以自信地说,在这些需求语句中放置数千行代码没有明显的代价。 但是,您必须不断检查您的代码是否为no memory leaks.

答案 2 :(得分:0)

AFAIK只要窗口正确关闭,CommonJS模块使用的内存就会被释放。除非您将模块分配给全局对象,否则它不会是泄漏。

就个人而言,我创建了一个可重复使用的工厂。实际上,这取决于应用程序的复杂程度,如果它只是NavGroup中的几个窗口,我只是直接写出来。

不要忘记使用Xcode仪器配置应用程序,以确保您的应用程序没有泄漏,如果确实如此,它将有助于发现泄漏。观看此video for demo(约1/3路)。