如何使用objective-c

时间:2015-07-29 12:54:44

标签: ios objective-c iphone crash

我在滚动视图(照片库)中显示多个图像时遇到问题。 我从文档目录中提取了图片。当我显示超过100张图片应用程序崩溃时。所以我想将图像存储在缓存中。

我想显示前15个图像,然后从缓存中显示其他图像。当我从缓存中滚动scrollview前15时,将显示,然后显示下一个。

要求是在scrollview不在collectionView或其他组件中显示图片。

files是从文档目录中提取的array个图像路径。

我已获取所有图片路径并存储在files array

int x=2,y=5;
for (int i = 0; i < files.count ; i++)
 {
   if(x<=308)
    {
       NSString *setPath=[NSString stringWithFormat:@"%@/%@",filePath,[files objectAtIndex:i]];
       UIImage* imagePath = [UIImage imageWithContentsOfFile:setPath];
       imgView=[[UIImageView alloc]initWithFrame:CGRectMake(x, y, 77, 75)];
       imgView.image=imagePath; 
       x+=80;
    }
    else
    {
        x=2;
        y+=77;

        NSString *setPath=[NSString stringWithFormat:@"%@/%@",filePath,[files objectAtIndex:i]];
        UIImage* imagePath = [UIImage imageWithContentsOfFile:setPath];
        imgView=[[UIImageView alloc]initWithFrame:CGRectMake(x, y, 77, 75)];
        imgView.image=imagePath;
        x+=80;
    }
        [gallaryScrollView addSubview:imgView];
        [self.view addSubview:gallaryScrollView];
         gallaryScrollView.contentSize=CGSizeMake(320, y+120);
 }

1 个答案:

答案 0 :(得分:1)

缓存并不能解决你的记忆问题。 (如果有的话,使用额外的内存缓存只会给应用程序带来更多的内存压力。)出于性能原因使用缓存,而不是减少内存使用。

问题在于您尝试将图片视图预先加载到滚动视图中。我建议延迟加载图像视图及其相关图像。而不是分15次(或其他)批量执行,我建议您使用UIScrollViewDelegate方法动态执行此操作:

  • 为滚动视图设置delegate;

  • 实施scrollViewDidScroll,它将:

    • 从滚动视图中删除任何不可见的图像视图(或至少在附近)

    • 添加已滚动到视图中的所有图片视图并设置其image属性

如果由于性能原因要与NSCache结合使用以进行缓存,可以根据需要进行缓存,但我建议首先关注主要的手动滚动视图委托实现。