Memory Appcelerator内存泄漏-合金框架
我在Appcelerator中使用Alloy框架,在使用Apple Instruments测试我的应用程序时,一直在努力解决内存泄漏问题 我有一个可滚动视图,视图是该可滚动视图的视图或“页面”,视图如缩略图是“页面”视图的子视图。所有这些视图都是动态创建的,然后在用户执行重新加载可滚动视图内容的搜索时删除并重新创建 我的问题是,即使我删除了可滚动视图并将其设置为null,每次执行搜索并创建新的可滚动视图时,仪器中的活动字节仍会继续增加。我应该如何处理这些UI元素,以便垃圾收集删除它们Memory Appcelerator内存泄漏-合金框架,memory,titanium,appcelerator,memory-leaks,titanium-alloy,Memory,Titanium,Appcelerator,Memory Leaks,Titanium Alloy,我在Appcelerator中使用Alloy框架,在使用Apple Instruments测试我的应用程序时,一直在努力解决内存泄漏问题 我有一个可滚动视图,视图是该可滚动视图的视图或“页面”,视图如缩略图是“页面”视图的子视图。所有这些视图都是动态创建的,然后在用户执行重新加载可滚动视图内容的搜索时删除并重新创建 我的问题是,即使我删除了可滚动视图并将其设置为null,每次执行搜索并创建新的可滚动视图时,仪器中的活动字节仍会继续增加。我应该如何处理这些UI元素,以便垃圾收集删除它们 var v
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);
}
var视频滑块;
函数加载数据(搜索术语、频道、排序、限制){
if(视频滑块){
$.scrollableViewHolder.remove(视频滑块);
videoSlider=null;
}
videoSlider=Alloy.createController('videoSlider',{}).getView();
$.scrollableViewHolder.add(视频滑块);
var viewSliderArray=[];
feed.getfeed({
成功:功能(数据){
Ti.API.info(“从Brightcove返回的视频数量”+videosObject.items.length);
var j=0;
对于(变量i=0;i 0){
viewSliderArray.push(viewSlider);
}
viewSlider=Alloy.createController('viewSlider',{}).getView();
j=0;
}
TENTIME=videosObject.items[i].长度/1000;
分钟=数学四轮(TENTIME/60);
秒=数学圆(试探时间%60);
秒=“0”+秒;
秒=秒.substr(秒.长度-2);
视频长度=分钟+“:”+秒;
videoBox=Alloy.createController(“videoBox”{
videoBoxTop:videoBoxTop[j],
videoBoxLeft:videoBoxLeft[j],
videoStill:videosObject.items[i].videoStillURL,
videoTitle:videosObject.items[i].名称,
videoLength:videoLength
}).getView();
添加(视频框);
j++;
}
viewSliderArray.push(viewSlider);
Ti.API.info(viewSliderArray);
videoSlider.views=viewSliderArray;
}
},搜索词,频道,排序,限制);
}
从scrollview中删除所有子项并将其设置为null。以下是可能对您有用的示例代码:
exports.removeChildren = function(thisView){
if (thisView.children)
{
var removeData = [];
for (var i = thisView.children.length; i > 0; i--)
{
removeData.push(thisView.children[i-1]);
};
// Remove childrens
for (var i = 0; i < removeData.length; i++)
{
thisView.remove(removeData[i]);
}
removeData = null;
}
}
exports.removeChildren=函数(thisView){
if(thisView.children)
{
var removeData=[];
对于(var i=thisView.children.length;i>0;i--)
{
removeData.push(thisView.children[i-1])
};
//删除儿童
对于(变量i=0;i
尝试使用此方法清理视图的内存
clean(Your_View);
Your_View = null;
function do_clean(e, c) {
try{
clean(c);
e.remove(c);
c = null;
}catch(ex){
Ti.API.info('Exception in removing child: '+ex +'children :'+c);
}
return;
}
function clean(e) {
if (e != null) {
if (e.children) {
for (var i = 0; i < e.children.length; i++) {
if(e.children[0] != undefined && e.children[0] != null)
do_clean(e, e.children[0]);
}
} else {
return;
}
}
}
clean(您的视图);
您的视图=null;
清洁功能(e、c){
试一试{
清洁(c);
e、 删除(c);
c=零;
}捕获(ex){
Ti.API.info('删除子项时出现异常:'+ex+'children:'+c);
}
返回;
}
功能清洁(e){
如果(e!=null){
如果(如儿童){
for(var i=0;i
还要尝试删除所有不需要的EventListener。您需要在scrollview上调用removeAllChildren,并将viewSliderArray设置为空数组,即viewSliderArray=[],否则将保留引用
此外,在使用仪器时,您可以搜索TiUI并查看哪个视图正在增加,这样您就可以锁定给您带来麻烦的特定视图。您解决了这个问题吗?