从 UIScrollView 中删除子视图 UIImageview
题
你好,我有一个 uiscrollview,并且在 uiscrollview 中有一个 uiimageview 对象。我启动应用程序。然后我在滚动视图处向右滚动,滚动视图发生变化,但我看不到我在 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 添加的下一个 uiimageview 对象。在添加下一个对象之前,我删除了上一个对象......出了什么问题?
删除我使用的对象
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;
}
}
然后我添加下一个对象
[滚动addSubview:imageView];
我删除了之前的对象,因为当我在滚动视图中添加 110 个图像时,我的应用程序崩溃了,所以我猜我必须管理内存。这就是我删除前一个对象的原因。
请任何人帮忙!
解决方案
一些让您走上正轨的建议:
如果您认为内存是一个问题,请对问题进行分区。例如,一次添加/删除 10 个图像。
当你试图避免自己的循环出现问题时,UIView 的 tag 属性是你最好的朋友。您可以在需要时为 UIImageView 设置特定标签,然后使用 [UIView viewWithTag:tag] 搜索该标签;它递归地工作。
st3fan 提出了关于并发修改的一个非常好的观点。一般来说,避免这种情况的一个好方法是添加到“删除数组”,然后removeObjectsInArray。
其他提示
我看到第一个问题是,你是遍历的阵列,同时还修改它。此外,您的ko
循环索引没有在任何地方使用。你总是抓住项目0。
什么:
NSArray* subviews = [[NSArray alloc] initWithArray: scroll.subviews];
for (UIView* view in subviews) {
if ([view isKindOfClass:[UIImageView class]]) {
[view removeFromSuperview];
}
}
[subviews release];
难道这不是正是你正在尝试做的?
不隶属于 StackOverflow