在ios app的scrollview中添加1000张图片

时间:2012-02-28 12:08:20

标签: objective-c ios uiscrollview

在我的ios应用程序中,我试图在滚动视图中加载1000个图像,当我运行代码时,它会崩溃。我发现这是内存不足的错误。我尝试添加700张图片,但没有崩溃。但我想添加超过1000张图像(大约4000张)并进行查看。如何管理所有图像并在没有任何崩溃的情况下获取它们。

请帮助我的朋友

2 个答案:

答案 0 :(得分:2)

我不知道你的图片来自哪里但是我写了一个自定义方法(在一个名为WebImageOperations的类中)来使用块和GCD加载图像:

这是班级: WebImageOperations.h

#import <Foundation/Foundation.h>

@interface WebImageOperations : NSObject {
}

// This takes in a string and imagedata object and returns imagedata processed on a background thread
+ (void)processImageDataWithURLString:(NSString *)urlString andBlock:(void (^)(NSData *imageData))processImage;
@end

WebImageOperations.m

#import "WebImageOperations.h"
#import <QuartzCore/QuartzCore.h>

@implementation WebImageOperations


+ (void)processImageDataWithURLString:(NSString *)urlString andBlock:(void (^)(NSData *imageData))processImage
{
    NSURL *url = [NSURL URLWithString:urlString];

    dispatch_queue_t callerQueue = dispatch_get_current_queue();
    dispatch_queue_t downloadQueue = dispatch_queue_create("com.isupport.processsmagequeue", NULL);
    dispatch_async(downloadQueue, ^{
        NSData * imageData = [NSData dataWithContentsOfURL:url];

        dispatch_async(callerQueue, ^{
            processImage(imageData);
        });
    });
    dispatch_release(downloadQueue);
}

@end

并在你的

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

// Change cell.picImageView to your ImageView
cell.picImageView = [WebImageOperations roundedImageView:cell.picImageView];
// Pass along the URL to the image (or change it if you are loading there locally)
[WebImageOperations processImageDataWithURLString:urlString andBlock:^(NSData *imageData) {
    if (self.view.window) {
        UIImage *image = [UIImage imageWithData:imageData];

        cell.picImageView.image = image;
    }

}];

这将根据需要加载图像,TableView将根据需要对它们进行排队。感谢

答案 1 :(得分:1)

只有在可见帧中时才需要加载图像。如果用户滚动远离加载的图像,则应卸载它并释放相关的内存。这就是你如何在不崩溃的情况下展示1000张图片。