假設我有一個帶有3個視圖(窗體)的ScrollableView,那些窗體視圖至少有10個字段,請看這個例子。有必要刪除視圖?爲了清理合金控制器(內存/性能)
index.js
$.content.add(Alloy.createController('scrollable').getView());
scrollable.js
$.scrollableView.addView(Alloy.createController('form',{
fields:[
{label:'field 1',type:'text'},
{label:'field 1',type:'date',value:'2016-06-08'},
...
]
}).getView());
$.scrollableView.cleanup = function() {
$.destroy();
$.off();
for(var i = parseInt($.scrollableView.views.length); i > 0; i--) if($.scrollableView.views[i-1]) {
if($.scrollableView.views[i-1].cleanup) $.scrollableView.views[i-1].cleanup();
$.scrollableView.views[i-1] = null;
$.scrollableView.removeView($.scrollableView.views[i-1]);
}
$ = args = null;
};
form.js
for(var i in args.fields) $.form.add(Alloy.createController('field',args.fields[i]).getView());
$.form.cleanup = function() {
$.destroy();
$.off();
for(var i in $.form.children) {
if($.form.children[i].cleanup) $.form.children[i].cleanup();
$.form.children[i] = null;
}
$.form.removeAllChildren();
$ = args = null;
};
當我清理所有的控制器,我還是不明白什麼是必須要做的。
當我想刪除ScrollableView時,我在每個View上運行清理功能,它是子級。
我應該在所有的ScrollableView視圖上運行清理功能嗎?
我應該清空所有的ScrollableView視圖嗎?
我應該刪除所有的ScrollableView視圖嗎?
我應該在所有的View兒童上運行清理功能嗎?
我是否應該清空所有View子項?
我應該刪除所有的View兒童嗎?
UPDATE
在這種情況下,我還需要清除所有的字段?或將數據設置爲空將解決這個問題?
form.js
var args = arguments[0],
data = {
fields:{}
};
for(var i in args.fields) {
data.fields[args.fields[i].label] = Alloy.createController('field',args.fields[i]).getView();
$.form.add(data.fields[args.fields[i].label]);
}
$.form.cleanup = function() {
$.destroy();
$.off();
//this is needed?
for(var i in data.fields) {
if(data.fields[i].cleanup) data.fields[i].cleanup();
data.fields[i] = null;
}
//this is needed?
$ = data = args = null;
};
無論如何,如果我的領域有一個事件偵聽器添加像「變」或「點擊」,我必須清理功能刪除它,對嗎?
如果你'null'的數據,所有對不同視圖的引用也會丟失。所以這將解決它 –