zoukankan      html  css  js  c++  java
  • IOS开发笔记

    前言:

    在IOS下通过URL读一张网络图片并不像Asp.net那样可以直接把图片路径放到图片路径的位置就ok,

    而是需要我们通过一段类似流的方式去加载网络图片,接着才能把图片放入图片路径显示。

    这里找了一段代码是用来加载图片:

    -(UIImage *) getImageFromURL:(NSString *)fileURL {
        //NSLog(@"执行图片下载函数");
        UIImage * result;
        NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileURL]];
        result = [UIImage imageWithData:data];
        return result;
    }


    通过这个方法处理后可以得到一个UIImage,这样就可以放入UI界面的UIImageView了。

    /*-----------------------------------------------切入主题-----------------------------------------------*/

    在APP开发中,加载网络图片中大多是以一连串的形式去加载图片,所以当图片多的话,线程就会卡死= =!

    所以,考虑到用户体验,这里需要找一种方法去异步加载图片!

    关于图片异步加载这个思路,其实我也不太懂,于是借鉴了网上一个开源的项目SDWebImage去对UIImageView进行扩展,

    最终优化网络图片的加载,使之获得两个新特性:

    1.多图片异步加载。

    2.加载完图片会用一个图片管理器去进行缓存。

    其中最重要的一段代码如下:

    - (void)setImageWithURL:(NSURL *)url refreshCache:(BOOL)refreshCache placeholderImage:(UIImage *)placeholder
    {
    	
        // Remove in progress downloader from queue
    	
        self.image = placeholder;
    	
        if (url)
        {
            if ([[CustomObject sharedCustomObject] isExistImage:url]) {
                NSLog(@"存在图片");
                self.image = [[CustomObject sharedCustomObject]getImage:url];
            }
            else{
                dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                    NSData * data = [[NSData alloc]initWithContentsOfURL:url];
                    UIImage *image = [[UIImage alloc]initWithData:data];
                    if (data != nil) {
                        dispatch_async(dispatch_get_main_queue(), ^{
                            [[CustomObject sharedCustomObject] addImage:image key:url];
                            self.image = image;
                        });
                    }
                });
            }
        }
    }

    可以直接传入一个NSURL的图片路径对象对图片进行加载,若加载不为空则把图片缓存放入图片管理器单例保存起来,下一次再调用这个方式时会判断URL是否存在去读缓存。

    这样异步加载,缓存图片的任务就完成了。

    实例源码可以戳这里。OK。




    主动用心,工作努力,坚持学习,坦诚分享,正面乐观,心存感恩

  • 相关阅读:
    Redis 高级数据结构:五、哈希对象
    Redis 高级数据结构:四、列表对象
    Redis 高级数据结构:三、字符串对象
    Redis 高级数据结构:二、简介
    总结1
    Windows程序代码重构
    Windows应用程序结构
    事件、消息循环和窗口函数
    窗口的创建和显示
    Windows的数据类型
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3194012.html
Copyright © 2011-2022 走看看