我正在开始一个新的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();
})();
非常感谢任何关于正确项目结构的指导。
答案 0 :(得分:2)
This是正在开发的社区应用程序,纯粹使用模块模式,也可以通过开发人员博客查找Forging系列,其中包含主要使用模块模式开发的样本
答案 1 :(得分:0)
我使用require(),并且在项目开始时我有一个很长的require() - 它可能是最大的Titanium项目之一。
我可以自信地说,在这些需求语句中放置数千行代码没有明显的代价。 但是,您必须不断检查您的代码是否为no memory leaks.
答案 2 :(得分:0)
AFAIK只要窗口正确关闭,CommonJS模块使用的内存就会被释放。除非您将模块分配给全局对象,否则它不会是泄漏。
就个人而言,我创建了一个可重复使用的工厂。实际上,这取决于应用程序的复杂程度,如果它只是NavGroup中的几个窗口,我只是直接写出来。
不要忘记使用Xcode仪器配置应用程序,以确保您的应用程序没有泄漏,如果确实如此,它将有助于发现泄漏。观看此video for demo(约1/3路)。