多图片下载

//
//  ViewController.m
//  多图下载案例
//
//  Created by kun on 16/8/11.
//  Copyright © 2016年 kun. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()
@property (nonatomic, strong) NSArray *apps;
@property (nonatomic, strong) NSMutableDictionary *images;
@property (nonatomic, strong) NSOperationQueue *queue;
@property (nonatomic, strong) NSMutableDictionary *operations;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.apps.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *identify = @"apps";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identify];
    if ( !cell )
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identify];
    }
    NSDictionary *dict = self.apps[indexPath.row];
    cell.textLabel.text = dict[@"name"];
    cell.detailTextLabel.text = dict[@"download"];
    __block UIImage *image = [self.images objectForKey:dict[@"icon"]];
    if ( !image )
    {
        NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
        NSString *fileName = [dict[@"icon"] lastPathComponent];
        NSString *fullPath = [caches stringByAppendingPathComponent:fileName];
        __block NSData *imageData = [NSData dataWithContentsOfFile:fullPath];
        if ( !imageData )
        {
            NSBlockOperation *cacheOperation = [self.operations objectForKey:dict[@"icon"]];
            if ( !cacheOperation )
            {
                NSBlockOperation *download = [NSBlockOperation blockOperationWithBlock:^{
                    NSURL *url = [NSURL URLWithString:dict[@"icon"]];
                    imageData = [NSData dataWithContentsOfURL:url];
                    [imageData writeToFile:fullPath atomically:YES];
                    image = [UIImage imageWithData:imageData];
                    if ( !image )
                    {
                        [self.operations removeObjectForKey:dict[@"icon"]];
                        return;
                    }
                    [self.images setObject:image forKey:dict[@"icon"]];
                    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                        [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
                    }];
                    [self.operations removeObjectForKey:dict[@"icon"]];
                }];
                [self.operations setObject:download forKey:dict[@"icon"]];
                [self.queue addOperation:download];
            }
        }
        else
        {
            image = [UIImage imageWithData:imageData];
            [self.images setObject:image forKey:dict[@"icon"]];
        }

    }
    cell.imageView.image = image;
    return cell;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    [self.images removeAllObjects];
    [self.queue cancelAllOperations];
}

- (NSArray *)apps
{
    if ( !_apps )
    {
        NSArray *temp = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"apps.plist" ofType:nil]];
        NSMutableArray *arrayM = [NSMutableArray arrayWithArray:temp];
        _apps = arrayM;
    }
    return _apps;
}
- (NSMutableDictionary *)images
{
    if ( !_images )
    {
        _images = [NSMutableDictionary dictionary];
    }
    return _images;
}
- (NSOperationQueue *)queue
{
    if ( !_queue )
    {
        _queue = [[NSOperationQueue alloc] init];
        [_queue setMaxConcurrentOperationCount:5];
    }
    return _queue;
}
- (NSMutableDictionary *)operations
{
    if ( !_operations )
    {
        _operations = [NSMutableDictionary dictionary];
    }
    return _operations;
}
/**
 Documents:会备份,不允许
 Library:
    Caches:缓存文件
    Preferences:偏好设置,保存帐号
 tem:临时文件夹,随时会被删除
 */
@end
时间: 2024-11-06 20:46:11

多图片下载的相关文章

Linux Shell编程实战---shell实现图片下载神器

$ cat dowonload_image.sh  #!/bin/bash ######################################### #图片下载器                              # #script_name: dowonload_image.sh         # #author:weixiaoxin write by 2017-09-20   #      #########################################

iOS利用SDWebImage图片下载缓存

一.我们先来了解一下SDWebImage的使用: 1.导入框架,引入头文件: #import "UIImageView+WebCache.h" 也可以直接使用CocoaPods来引入和管理 (OC 如下) platform :ios, '7.0' pod 'SDWebImage', '~>3.8' (swift)并且要确保添加了use_frameworks,iOS版本为8.0+ platform :ios, '8.0' use_frameworks! 2.图片下载并缓存方法: /

将网页中的图片下载到本地的方法

/** * 传入要下载的图片的url列表,将url所对应的图片下载到本地 * @param urlList */ public static String downloadPicture(String urlString,String path) { URL url = null; String imgPath = null; try { url = new URL(path+urlString); // 打开URL连接 URLConnection con = url.openConnectio

Python实战:美女图片下载器,海量图片任你下载

Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知识总结.希望大家能够快速入门并学习Python这门语言. 本文是在前一部分Python基础之上Python实战:Python爬虫学习教程,获取电影排行榜,再次升级的Python网页爬虫实战课程. 1.项目概述. 利用XPath和requests模块进行网页抓取与分析,达到网页图片下载的效果. 抓爬图片地址:http://www.2c

根据网址把图片下载到服务器C#代码

ASPX页面代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GetPictureByUrl.aspx.cs" Inherits="HoverTreeMobile.GetPictureByUrl" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtm

Picasso:一个专为Android打造的强大的图片下载和缓存库

简介 在Android应用中,图片消费了大量的资源,却为应用提供了很好的视觉体验.幸运的是,Picasso为你的应用提供了非常容易的图片加载方式--通常一行代码就可以搞定! Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView); Picasso处理了Android上图片加载的许多坑: 1)在Adapter中,处理了ImageView的循环利用和取消下载. 2)耗费最小的内存处理了复杂的图

多线程(四)之cell图片下载(SDWebImage的认识总结)

1.SDWebImage 首先这是个很有名的第三方框架,功能主要是:图片下载,图片缓存,下载进度监听和gif处理等.. 本次的目的是了解一下底层实现和框架的使用. 1.仿写SDWebImage 1.1自定义下载图片的NSOperation 实现起来很简单:思路如下: 1.我要下载图片在模拟器或者真机显示,肯定第一步就是在sb中拉一个imageview控件. 2.肯定要在控制器中设置一个全局属性的queue队列,一般是要懒加载一下,目的也就是实例化队列queue. 3.然后就是采用多线程中的NSO

iOS多图片下载

iOS多图片下载.在cell里面下载图片.做了缓存优化. (app.icon是图片地址) // 先从内存缓存中取出图片 UIImage *image = self.images[app.icon]; if (image) { // 内存中有图片 cell.imageView.image = image; } else { // 内存中没有图片 // 获得Library/Caches文件夹 NSString *cachesPath = [NSSearchPathForDirectoriesInDo

iOS边练边学--多线程练习的多图片下载 以及 使用第三方框架(SDWebImage)的多图片下载

一.自己实现多图片下载应该注意的问题 沙盒缓存的问题 程序缓存的问题 cell重复利用显示图片混乱的问题 -- 用户拖拽快,下载图片慢导致的 解决图片混乱引入NSOperation集合的问题 资源下载失败的问题(练习中没有出现过,但是一定要考虑) 1 #import "ChaosViewController.h" 2 #import "ChaosApp.h" 3 4 @interface ChaosViewController () 5 /** 模型集合 */ 6

Bing图片下载器(Python实现)

分享一个Python实现的Bing图片下载器.下载首页图片并保存到到当前目录.其中用到了正则库re以及Request库. 大致流程如下: 1.Request抓取首页数据 2.re正则匹配首页图片URL 3.再次使用Request下载图片数据 源码: # --*-- encoding: UTF-8 --*-- """bingloader.py下载Bing.com首页图片""" import reimport sysimport osimport r