您好我有一个uiscrollview,我在uiscrollview中有一个uiimageview对象。 我启动了应用程序。然后我滚动到滚动视图右侧,滚动视图更改但我无法看到我添加的下一个uiimageview对象 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView。在我添加下一个对象之前我删除了以前的...出了什么问题?
删除我使用的对象
UIImageView *l;
for (NSInteger ko=0; ko<[[scroll subviews] count]; ko++){
if ([[[scroll subviews] objectAtIndex:0] isKindOfClass:[UIImageView class]]){
//This code never gets hit
l=[[scroll subviews] objectAtIndex:0];
[l removeFromSuperview];
l=nil;
}
}
然后我添加下一个对象
[scroll addSubview:imageView];
我删除了上一个对象,因为当我在scrollview上添加110个图像时我的应用程序崩溃所以我必须管理内存。这就是我删除前一个对象的原因。
任何人都可以帮忙!
答案 0 :(得分:2)
我看到的第一个问题是你在修改数组的同时循环遍历数组。您的ko
循环索引也不会在任何地方使用。你总是抓住第0项。
怎么样:
NSArray* subviews = [[NSArray alloc] initWithArray: scroll.subviews];
for (UIView* view in subviews) {
if ([view isKindOfClass:[UIImageView class]]) {
[view removeFromSuperview];
}
}
[subviews release];
这不正是你想要做的吗?
答案 1 :(得分:2)
有一些建议让你走上正轨:
如果您认为内存存在问题,请对问题进行分区。例如,一次添加/删除10个图像。
在尝试避免维护自己的循环问题时,UIView的标记属性是您最好的朋友。您可以在需要时为UIImageViews设置特定标记,然后使用[UIView viewWithTag:tag]搜索标记;它以递归方式工作。
st3fan提出了一个关于并发修改的非常好的观点。一般来说,避免它的一个好方法是添加到“删除数组”然后删除ObjectsInArray。