`
rensanning
  • 浏览: 3548699 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:38148
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:607314
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:682336
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:89355
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:401851
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69694
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:91723
社区版块
存档分类
最新评论

【转】避免Titanium Mobile App发生Memory Leak的小技巧

阅读更多
【原文】http://erinylin.blogspot.com/2011/11/some-tips-to-avoid-leaking-memory-in.html (需要FQ)

Titanium Mobile 真的是一個易學的跨平台 Mobile App SDK,不過由於 Javascript 的自由撰寫風格,外加一般使用者並不了解 Titanium Mobile SDK 倒底中介了什麼,往往開發到後期發現 App 在 runtime 時常出現 out of memory issue,用盡了各種方法「抓漏」也搞不懂為什麼 ?這個時候你就會開始沮喪,然後內心的 OS 狂叫著:「為什麼我不乖乖的學 Objective-C or Java!!!!!」
其實只要堅持幾種撰寫原則,就可以將記憶體漏失傷害降到最低。

以下是幾個簡單用來避免記憶體漏失的技巧:

1. 使用 namespace 來寫作避免混亂 global scope
     //專案名稱的 namespace
     var Ns = {};
     //處理 ui 
     Ns.ui = {};
     //處理 model
     Ns.model = {};
     //處理 control
     Ns.control = {};


2. Using factory method to create instance.
使用工廠方法製作實體
    Ns.ui.createMainWindow = function(){
          var win = Ti.UI.createWindow({
                title: 'Hello world'
          });
          //其他要放置在 main window 的 view components 都寫在這邊
   
          //記得回傳實體
          return win;
    }

    var mainWin = Ns.ui.createMainWindow();
    mainWin.open();


3. 小心使用 Ti.App.addEventListener 等 Ti 系列的 global event listener (最強兇手)
如下範例:
    Ns.ui.createTestWindow = function(){
        var win = Ti.UI.createWindow({
              title:'Test'
        });
        var label = Ti.UI.createLabel({
              text:'hahaha'
        });
        win.add( label );
     //如果監聽客製 event views:hoho 順便將 label 引入
     Ti.App.addEventListener('views:hoho', function(){
              //label 是 local variable 喔!!!!
              label.text = 'hohoho';
     });
     /*
       * 重點!! 當 global event listener 接受了 local variable 時,
       * 就請記得在 win.close() 的時候也要一併移除 event listener 
      */
     
     return win;
    }


4. 無腦的最終手段!!真的找不到哪邊漏水的話視窗關閉時請直接將所有實體關閉或指定 null
     Ns.ui.createMainWindow = function(){
          var win = Ti.UI.createWindow({
                title: 'Hello world'
          });
          var label = Ti.UI.createLabel({
              text:'hahaha'
        });
         win.add( label );

         //自定 win close 要另外執行的 function
         win.addEventListener('close', function(){
             win.removeEventListener( 'close', arguments.callee );
             win.remove( label );
             label = null;
             //再 close 一次也不會出事
             win.close();
             win = null;
         });
          return win;
    }

分享到:
评论

相关推荐

    Titanium Mobile API

    ### Titanium Mobile API 知识点详解 #### 一、Titanium Mobile API 概述 Titanium Mobile API 是一款由 Appcelerator 公司提供的用于跨平台移动应用开发的强大工具包。该工具允许开发者使用 JavaScript 编写应用...

    Titanium Mobile SDK 3.1.0 Apidoc 离线版

    Titanium Mobile SDK 3.1.0 是一个用于构建原生移动应用的开发工具,尤其针对iOS和Android平台。这个版本的Apidoc是开发者的重要参考资料,它包含了完整的API文档,帮助开发者理解并使用Titanium框架的各种功能。...

    TiInspector, 通过 Chrome DevTools调试 Titanium Mobile 应用程序.zip

    TiInspector, 通过 Chrome DevTools调试 Titanium Mobile 应用程序 #Ti 检查器Ti检查器允许在 Chrome DevTools web界面中调试 Appcelerator Titanium 应用程序。工具通过将命令和消息转换为 Chrome 调试协议和 ...

    Titanium Mobile API 1.8.2.chm

    Titanium Mobile API 1.8.2.chm 内容很好但是英文版的,E不好的童鞋慎下

    Titanium Mobile API的chm文件制作思路

    Titanium Mobile API是用于开发跨平台移动应用的框架,它基于JavaScript,允许开发者用一种语言创建iOS和Android应用。这个框架提供了丰富的API,使得开发者能够访问设备的各种功能,如GPS、摄像头、网络通信等。本...

    TiJSPDF, Titanium Mobile 应用程序的JSPDF插件.zip

    TiJSPDF, Titanium Mobile 应用程序的JSPDF插件 TiJSPDFTiJSPDF是用于使用JSPDF库生成pdf并在 Titanium Mobile 应用程序中操作它们的Titanium Mobile 应用程序的一种 JSPDF插件插件。这个插件独立于 Titanium 维护,...

    TitanTricks, Titanium Mobile的代码示例和组件.zip

    TitanTricks, Titanium Mobile的代码示例和组件 TitanTricks自述文件TitanTricks是 Titanium Mobile 项目,充满了可以重用的代码示例和技巧,面向begginers和中级级别用户。android和iOS兼容,但有些示例仅适用于 ...

    Android-titanium_mobile.zip

    Android-titanium_mobile.zip,带有javascript的本地ios、android和windows应用程序,安卓系统是谷歌在2008年设计和制造的。操作系统主要写在爪哇,C和C 的核心组件。它是在linux内核之上构建的,具有安全性优势。

    ti.mely, Titanium Mobile的Ti.mely 本机定时器.zip

    ti.mely, Titanium Mobile的Ti.mely 本机定时器 Ti.melyTi.mely 项目提供对Android和iOS计时器的访问。在开始之前* 是在使用这个模块之前,设计用于 Titanium SDK 3.1.1. GA *的iOS和Android本机模块。 如果你需要...

    [Titanium] Appcelerator Titanium 移动应用开发教程 (英文版)

    [Packt Publishing] Creating Mobile Apps with Appcelerator Titanium (E-Book) ☆ 图书概要:☆ Develop fully-featured mobile applications using a hands-on approach, and get inspired to develop more ...

    Building Mobile Applications with Titanium

    Building Mobile Applications with Titanium, 这是mobi版,适合knidle等电子书阅读。 详细介绍了titanium框架的使用

    sublimetext-tita, Tita Titanium Mobile/Alloy sublime text 2插件.zip

    sublimetext-tita, Tita Titanium Mobile/Alloy sublime text 2插件 这个插件不再主动地维护 ***因为我不再使用 st2/st3 。 有人对 fork 感兴趣并维护它?替代插件:...

    titanium_mobile_tizen

    适用于 Tizen 的 Titanium Mobile 欢迎来到 Appcelerator Titanium Mobile 开源项目。 Titanium 为 Web 开发人员提供了一个使用 JavaScript 构建跨平台原生移动应用程序的平台。 有关 Titanium 的更多信息,请访问 ...

    titanium-typescript:TypeScript 的 Titanium Mobile 类型

    Titanium Appcelerator API v3.1.3.GA 的环境声明。 var ROWS: number = 10; var children: Array<Titanium> = button.getChildren(); var window: Titanium.UI.Window = Titanium.UI.createWindow({ title: '...

    haxe_titanium_mobile:Appcelerator Titanium Mobile 的 Haxe Extern 类

    要安装到 haxelib,请运行haxelib git titanium_mobile_externs https://github.com/momer/haxe_titanium_mobile.git <version> haxelib 截至本次更新,最新为 3.5.0-rc1。 使用 externs 很简单,下面是test/Test...

    jasmine-titanium:Jasmine Spec框架与Appcelerator Titanium Mobile的集成

    贾米钛 这将JavaScript BDD框架带到了Titamium Mobile。 入门 制作目录并获取Jasmine Titanium cd Resources mkdir spec lib vendor cd vendor git clone ... Titanium Mobile 1.7.2或更高

    napp.alloy.adapter.restapi, 用于 Titanium 合金框架的RestAPI同步适配器.zip

    napp.alloy.adapter.restapi, 用于 Titanium 合金框架的RestAPI同步适配器 napp.alloy. adapter.restapi用于 Titanium 合金框架的RestAPI同步适配器。响应代码适配器的设计具有以下结构。200: 请求成功。201: 已经...

    TitaniumMobile开发跨平台iOS和Android应用

    ### 关于Titanium Mobile开发跨平台iOS和Android应用 #### 我们的主角-Titanium Mobile Titanium Mobile是一种跨平台的移动应用开发框架,它允许开发者使用JavaScript、HTML和CSS来构建高性能的原生应用程序。该...

Global site tag (gtag.js) - Google Analytics