我在 Appcelerator 中使用 Alloy 框架,并且在使用 Apple Instruments 测试我的应用程序时一直在努力解决内存泄漏问题。
我有一个可滚动视图,视图是该可滚动视图的视图或“页面”,而缩略图之类的视图是“页面”视图的子视图。所有这些视图都是动态创建的,然后在用户执行重新加载可滚动视图内容的搜索时删除并重新创建。
我的问题是,即使我删除了可滚动视图并将其设置为 null,每次执行搜索并创建新的可滚动视图时,Instruments 中的实时字节都会继续增长。我应该如何处理这些 UI 元素以便垃圾收集将它们删除?
var videoSlider;
function loadData(searchTerms,channel,sortBy,limit) {
if (videoSlider) {
$.scrollableViewHolder.remove(videoSlider);
videoSlider = null;
}
videoSlider = Alloy.createController('videoSlider', {}).getView();
$.scrollableViewHolder.add(videoSlider);
var viewSliderArray = [];
feeds.GetFeeds({
success: function(data) {
Ti.API.info("Number of videos returned from Brightcove " + videosObject.items.length);
var j = 0;
for(var i=0; i<videosObject.items.length; i++) {
if(i % 8 == 0) {
Ti.API.info(i);
if(i > 0) {
viewSliderArray.push(viewSlider);
}
viewSlider = Alloy.createController('viewSlider', {}).getView();
j = 0;
}
tempTime = videosObject.items[i].length/1000;
minutes = Math.round(tempTime/60);
seconds = Math.round(tempTime%60);
seconds = "0"+seconds;
seconds = seconds.substr(seconds.length-2);
videoLength = minutes+":"+seconds;
videoBox = Alloy.createController('videoBox', {
videoBoxTop: videoBoxTop[j],
videoBoxLeft: videoBoxLeft[j],
videoStill : videosObject.items[i].videoStillURL,
videoTitle: videosObject.items[i].name,
videoLength: videoLength
}).getView();
viewSlider.add(videoBox);
j++;
}
viewSliderArray.push(viewSlider);
Ti.API.info(viewSliderArray);
videoSlider.views = viewSliderArray;
}
},searchTerms,channel,sortBy,limit);
}