2014-09-27 62 views
0

目前在Titanium中製作ios應用程序時,我必須將導航組傳遞到所有窗口。 這意味着始終將導航組通過整個函數調用堆棧傳遞到啓動窗口的部分。Titanium iOS:全局導航組錯誤?

function launchAboutWindow(mynavgroup) 
{ 
var window = TI.UI.createWindow({navgroup: mynavgroup}); 
} 

因爲無論如何它總是一樣,只是簡單地有一個GLOBAL導航組是不好的做法?而不是傳遍整個地方的導航組上下文?

function launchAboutWindow() 
{ 
var window = TI.UI.createWindow({navgroup: GLOBALNAVGROUP}); 
} 

這樣做的負面後果是什麼?

回答

1

那麼,有關全局變量的事情是,它們總是保留在內存中,並沒有被垃圾收集器清理。這就是爲什麼避免把東西放在全球範圍內的好習慣。

當然,對於每一條規則都有一個例外。在我看來,因爲無論如何你都在傳遞參考,所以你要保持這個對象(它是參考)活着。在我看來,只有讓全球範圍內保持這種事情纔有意義 - 甚至只是爲了使代碼更易於維護 - 這不僅僅是保持正確的重要性。

我不會那樣做每個對象 - 每個對象都是自己的。

順便說一句 - 在Alloy中,Titanium有一個特殊的命名空間用於全局對象(不要濫用它!)。

另外,我建議看跨平臺導航控制器:

http://www.appcelerator.com/blog/2013/08/a-cross-platform-navigation-group/

http://www.appcelerator.com/blog/2011/08/forging-titanium-episode-2-a-cross-platform-navigation-controller/

https://github.com/vuinguyen/Ti-Navigation-Controller

+0

當我們第一次有這個問題,我們用於NavigationWindow一個全局變量,但我們上週重新實現了這個新項目,而不是使用全局的,我們將navwin作爲參數傳遞給子控制器,然後調用openWindow在那。我不確定這是比全球導航更好還是更差?任何想法?另外,對於Android實現的NavigationWindow,我們使用這裏的解決方案:http://fokkezb.nl/2013/10/21/cross-platform-ui/效果很好。 – phil 2014-09-29 08:16:44