2012-02-27 2 views
5

Я начинаю новое приложение Titanium и хочу использовать лучшие практики и избегать утечек памяти с самого начала. Я новичок в CommonJS, а также в платформе Titanium в целом.Пожалуйста, порекомендуйте структуру проекта титана, используя CommonJS

К сожалению, все образцы образцов для титана окружают на Ti.include("/lib/module") вместо newer recommended best practice от require("/lib/module").

Что меня беспокоит, так это может потребоваться использование памяти с использованием CommonJS. Из CommonJS Modules in Titanium documentation в нем указано, что модули будут кэшироваться, не означает ли это, что если я когда-нибудь получу доступ к модулю, который все эти функции внезапно останутся в памяти, даже если они выйдут из области видимости?

Я начал новое приложение со следующей структурой

/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(); 
})(); 

Любое руководство по правильная структура проекта очень ценится.

ответ

2

This приложение сообщества в разработке, что чисто использует модуль шаблон, а также просматривать блог разработчиков, чтобы найти ковочную серию, которые имеют образцы разработаны в основном с использованием модулем шаблона

+0

Это прекрасно, структура проекта - именно то, что я был после. –

0

Я использую require(), и у меня есть длинный старт require() в начале проекта, который может быть одним из самых больших проектов Titanium.

И я могу быть уверенным в том, что нет видимых затрат на то, чтобы вставлять tousands строк кода в эти требуемые утверждения. Однако, вы должны constently проверить, что ваш код no memory leaks.

0

AFAIK память, используемая модулем CommonJS, выводится всякий раз, когда окно правильно закрыто. Если вы не назначите модуль глобальному объекту, в этом случае это не будет утечкой.

Лично я создаю многоразовую фабрику. На самом деле, это зависит от того, насколько сложным является приложение, если это всего лишь несколько окон в NavGroup, я просто пишу это прямо.

И не забудьте прокомментировать приложение с помощью инструментов Xcode, чтобы убедиться, что ваше приложение не протекает, и если это произойдет, это поможет найти утечку. Смотрите это video for demo (около 1/3 пути).

+0

В соответствии с документами все модули CommonJS кэшируются. Я протестировал эту теорию, создав полный модуль состояния, который упоминался в одном окне, закрывался, располагался и снова открывался, состояние сохранялось. Это также объясняется на странице complorer commonJS, что модули полностью заполнены. https://wiki.appcelerator.org/display/guides/CommonJS+Modules+in+Titanium#CommonJSModulesinTitanium-Caching –

Смежные вопросы