Я использую инфраструктуру Alloy в Appcelerator и борюсь с утечками памяти при тестировании своего приложения с помощью Apple Instruments.
У меня есть прокручиваемый вид, представления, которые являются представлениями или «страницами» этого прокручиваемого представления, и представления, такие как миниатюры, которые являются дочерними элементами представлений «страницы». Все эти представления создаются динамически, а затем удаляются и создаются заново, когда пользователь выполняет поиск, который перезагружает содержимое прокручиваемого представления.
Моя проблема заключается в том, что, хотя я удаляю прокручиваемое представление и устанавливаю для него значение null, живые байты в инструментах продолжают расти каждый раз, когда выполняется поиск и создается новое прокручиваемое представление. Как я должен обрабатывать эти элементы пользовательского интерфейса, чтобы их можно было удалить при сборке мусора?
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);
}