2012-02-27 19 views
5

Zaczynam tworzyć nową aplikację Titanium i chcę korzystać z najlepszych praktyk i unikać przecieków pamięci od samego początku. Jestem nowy w CommonJS, a także w całej platformie Titanium.Proszę polecić tytanową strukturę projektu przy użyciu CommonJS

Niestety wydaje się, że wszystkie przykładowe aplikacje dla tytanu surround na Ti.include("/lib/module") zamiast newer recommended best practice z require("/lib/module").

Obawiam się, że użycie pamięci CommonJS może wymagać użycia pamięci. Z wersji CommonJS Modules in Titanium documentation wynika, że ​​moduły będą buforowane, czy nie oznacza to, że jeśli kiedykolwiek uzyskam dostęp do modułu, wszystkie te funkcje nagle pozostaną w pamięci, nawet jeśli wykroczą poza zakres?

zacząłem nową aplikację o następującej strukturze

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

Stąd mój główny app ma pojedynczy widok styl deski rozdzielczej, która jest luźno następującą strukturę:

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

Wszelkie wytyczne dotyczące poprawna struktura projektu jest bardzo doceniana.

Odpowiedz

2

This jest aplikacja społeczność w fazie rozwoju, która czysto korzysta z modułu wzór, również przejrzeć na blogu deweloperskim znaleźć Kucie serie, które mają próbki opracowany głównie za pomocą modułu wzór

+0

To idealne, struktura projektu jest dokładnie tym, za czym byłem. –

0

Używam require() i mam długi początek wymagania() na początku projektu - który może być jednym z największych projektów Titanium.

Mogę śmiało powiedzieć, że nie ma widocznych kosztów w umieszczaniu tysięcy linii kodu w tych wymaganiach. Jednak trzeba constently sprawdzić, czy kod ma no memory leaks.

0

AFAIK pamięć używana przez moduł CommonJS jest zwalniana za każdym razem, gdy okno jest poprawnie zamknięte. Dopóki nie przypiszesz modułu do obiektu globalnego, w takim przypadku nie będzie to przeciek.

Osobiście tworzę fabrykę do wielokrotnego użytku. Właściwie to zależy od tego, jak skomplikowana jest aplikacja, jeśli jest to tylko kilka okien w NavGroup, po prostu piszę to prosto.

I nie zapomnij profilować aplikacji za pomocą instrumentów Xcode, aby upewnić się, że aplikacja nie wycieka, a jeśli tak, pomoże to w znalezieniu wycieku. Zobacz to: video for demo (około 1/3 wejścia).

+0

Zgodnie z dokumentami wszystkie moduły CommonJS są buforowane. Przetestowałem tę teorię, tworząc pełny moduł stanu i przywołany w jednym oknie, zamknięty, usunięty i ponownie otwarty, stan został zachowany. Zostało to również wyjaśnione na stronie commonJS aplikacji Appellator, że moduły są pełne. https://wiki.appcelerator.org/display/guides/CommonJS+Modules+w+Tytanium#CommonJSModulesinTitanium-Caching –