3

您好,我有一个 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;

        }
    }

然后我添加下一个对象

[滚动添加子视图:图像视图];

我删除了前一个对象,因为当我在滚动视图中添加 110 张图像时我的应用程序崩溃了,所以我想我必须管理内存。这就是我删除前一个对象的原因。

请任何人帮忙!

4

2 回答 2

2

一些建议可以让您走上正轨:

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

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

  3. st3fan 提出了一个很好的关于并发修改的观点。一般来说,避免它的好方法是添加到“删除数组”,然后删除ObjectsInArray。

于 2010-01-26T05:19:55.633 回答
2

我看到的第一个问题是您在修改数组的同时循环遍历它。您的ko循环索引也不会在任何地方使用。你总是抓住项目 0。

关于什么:

NSArray* subviews = [[NSArray alloc] initWithArray: scroll.subviews];
for (UIView* view in subviews) {
    if ([view isKindOfClass:[UIImageView class]]) {
         [view removeFromSuperview];
    }
}
[subviews release];

这不正是你想要做的吗?

于 2010-01-23T15:44:45.200 回答