你好,我有一个 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 个图像时,我的应用程序崩溃了,所以我猜我必须管理内存。这就是我删除前一个对象的原因。

请任何人帮忙!

有帮助吗?

解决方案

一些让您走上正轨的建议:

  1. 如果您认为内存是一个问题,请对问题进行分区。例如,一次添加/删除 10 个图像。

  2. 当你试图避免自己的循环出现问题时,UIView 的 tag 属性是你最好的朋友。您可以在需要时为 UIImageView 设置特定标签,然后使用 [UIView viewWithTag:tag] 搜索该标签;它递归地工作。

  3. 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];

难道这不是正是你正在尝试做的?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top