2012-02-27 32 views
5

'u kullanarak bir titanyum proje yapısını öneriyorum Yeni bir Titanyum uygulaması başlatıyorum ve en iyi uygulamaları kullanmak istiyorum ve hareket halindeyken bellek sızıntısından kaçınmak istiyorum. CommonJS'nin yanı sıra genel olarak Titanyum platformunda yeniyim.Lütfen CommonJS

Maalesef titanyum için tüm örnek uygulamalar Ti.include("/lib/module") yerine newer recommended best practicerequire("/lib/module") yerine geçer.

Endişelenmem gereken şey, CommonJS kullanmanın gerektirdiği bellek tüketimidir. CommonJS Modules in Titanium documentation'dan, modüllerin önbelleğe alınacağını belirtir, bu, eğer bir modüle erişirsem, kapsam dışında kalsa bile tüm bu işlevlerin aniden bellekte kalması anlamına gelir?

aşağıdaki yapıya Buradan

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

ile yeni bir uygulama başlattık benim ana uygulama gevşek şöyle yapılandırılmıştır tek pano tarzı görünümü vardır: üzerine

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

Herhangi bir rehberlik Doğru bir proje yapısı büyük beğeni topluyor.

cevap

2

This tamamen numuneler modül desen

+0

Bu mükemmel, proje yapısı tam olarak peşindeyim. –

0

Ihtiyacı() kullanıyorum ve projenin başlangıcında() en büyük Titanyum projelerinden biri olabilir.

Ve bu ifadeleri gerektiren kod satırları tousands koyarak görünür hiçbir ücret alındığını söyleyerek emin olabilirler. Ancak, constently kodunuzu no memory leaks.

0
kullanarak çoğunlukla geliştirilen var Dövme serisini bulmak da geliştirici blogunda bakmak, modül desen kullanan geliştirilmekte olan topluluk uygulaması olduğunu kontrol etmeli 0JFLAFAIK, CommonJS modülü tarafından kullanılan bellek, pencere düzgün bir şekilde kapatıldığında serbest bırakılır. Modülü genel bir nesneye atamadıkça, bu durumda bir sızıntı olmaz.

Şahsen yeniden kullanılabilir bir fabrika yapıyorum. Aslında, uygulamanın ne kadar karmaşık olduğuna bağlı olarak, eğer NavGroup içinde sadece birkaç pencere varsa, onu doğrudan yazarım.

Ve emin uygulama sızıntı değildir ve eğer olursa, bu sızıntıyı bulmak için yardım edeceğiz yapmak Xcode aletlerle uygulamanızı profil unutmayın. Bu video for demo'u (yaklaşık 1/3 yol) izleyin.

+0

Dokümanlara göre, tüm CommonJS modülleri önbelleğe alınır. Bu teoriyi bir devlet tam modülü oluşturarak test ettim ve bir pencerede atıfta bulundu, kapatıldı, imha edildi ve tekrar açıldı, devlet muhafaza edildi. Bu ayrıca, modüllerin dolu olduğu appcelerator commonJS sayfasında açıklanmaktadır. https://wiki.appcelerator.org/display/guides/CommonJS+Modules+in+Titanium#CommonJSModulesinTitanium-Caching –

İlgili konular