`
zcw_java
  • 浏览: 303728 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用GCD异步下载图片

 
阅读更多
GCD(Grand Central Dispatch)是一个大的主题。它可以提高代码的执行效率与多核的利用率。是苹果的开源项目

如何从网上下载大量的文件, 方法有许多,传通的就是用多线程,面iOS中有很好用的Operator Queeu, 或者用传通的NStrhead, pthread. 今天我不介绍这些方法,而是得用GCD来完成这个下载任务。今天这个 demo, 展示面几个功能:

    预定义了大量的要下载的图片URL
    创建一个GCD queue并开始下载图片
    在动画出现消失的时候,同时显示图片
@interface UIImageView (DispatchLoad)
- (void) setImageFromUrl:(NSString*)urlString;
- (void) setImageFromUrl:(NSString*)urlString
              completion:(void (^)(void))completion;
@end

#import "UIImageView+DispatchLoad.h"
@implementation UIImageView (DispatchLoad)
- (void) setImageFromUrl:(NSString*)urlString {
    [self setImageFromUrl:urlString completion:NULL];
}
- (void) setImageFromUrl:(NSString*)urlString
              completion:(void (^)(void))completion {
   
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
       
        NSLog(@"Starting: %@", urlString);
        UIImage *avatarImage = nil;
        NSURL *url = [NSURL URLWithString:urlString];
        NSData *responseData = [NSData dataWithContentsOfURL:url];
        avatarImage = [UIImage imageWithData:responseData];
        NSLog(@"Finishing: %@", urlString);
       
        if (avatarImage) {
            dispatch_async(dispatch_get_main_queue(), ^{
                self.image = avatarImage;
            });
            dispatch_async(dispatch_get_main_queue(), completion);
        }
        else {
            NSLog(@"-- impossible download: %@", urlString);
        }
    });  
}
@end

这只是一个简单展示 GCD 异步操作的 demo,它的用武之地远不止这点。记住,最重要的是使用它后,即使我们的工作线程在处理很繁重的任务,也能使我们的 UI 很平滑
分享到:
评论

相关推荐

    GCD异步获取图片

    本篇文章将深入探讨如何使用GCD异步获取图片,以提升应用程序的性能和用户体验。 一、GCD基本概念 1. 并发编程:GCD的主要目标是通过管理线程池来实现并发,减少程序员对线程创建和销毁的直接操作。 2. 任务与队列...

    OC-GCD异步线程下载图片

    总之,OC-GCD异步线程下载图片是通过创建并行队列,将下载任务放到后台执行,然后在主线程更新UI,以保证界面的流畅性和响应性。这个过程涉及到了多线程、网络请求以及Block的内存管理等多个iOS开发中的关键知识点。

    ios异步下载图片

    综上所述,iOS中的异步图片下载涉及到多线程技术,包括GCD、NSOperationQueue和URLSession的使用。通过合理利用这些工具,开发者可以构建高效且流畅的应用,为用户提供更好的体验。同时,使用第三方库可以帮助开发者...

    gcdTest下载图片 dispatch_async

    在提供的压缩包文件名“gcdTest”中,很可能包含了一个简单的示例项目,演示了如何使用GCD和dispatch_async来实现异步下载图片的功能。这个项目可能包含了一些源代码文件,如.m(Objective-C)或.swift(Swift),...

    iOS 异步下载图片实现瀑布流

    在iOS开发中,异步下载图片并实现瀑布流布局是一种常见的需求,特别是在构建社交媒体应用或者电商应用时。本文将深入探讨如何使用Objective-C(OC)语言来实现这一功能,包括图片的异步加载、缓存机制以及瀑布流布局...

    异步图片下载显示

    首先,"异步图片下载显示"是指在不阻塞主线程的情况下,后台下载图片并在图片下载完成后,在UI界面上进行更新。这种技术避免了因为网络请求导致的界面卡顿,提高了用户体验。主要的实现方式包括使用GCD(Grand ...

    网络图片 异步显示

    8. **GCD(Grand Central Dispatch)**:另一种异步加载图片的方法是使用GCD队列,将下载任务放入后台队列,然后在主线程上更新UI。 UIASYImageView很可能已经实现了上述的一种或多种方法,提供了简单的接口供...

    ios 多线程下载图片并显示

    // 使用GCD异步下载图片 UIImage *image = nil; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSData *data = [NSData dataWithContentsOfURL:url]; image = [UIImage ...

    EGOImageView异步下载图片

    这个组件的核心在于其异步加载机制,它会开启一个新的线程去下载图片,避免阻塞主线程,保持UI的流畅性。同时,它还支持缓存机制,对于已经下载过的图片,会直接从内存或磁盘缓存中读取,进一步提高了加载速度。 ...

    iOS异步加载图片 (需要至少12个字的名称,过分!)

    3. **下载图片**:在队列中添加操作或使用`dispatch_async()`启动异步任务,下载图片。可以使用`NSURLSession`或`NSURLConnection`进行网络请求。 4. **处理图片**:下载完成后,对图片进行解码(如缩放、转换格式等...

    swift异步下载网络图片

    以下是如何使用`NSThread`进行异步图片下载的两种方法: 1. **创建并启动线程**: 在这种情况下,我们可以直接创建一个新的`NSThread`对象,并在其中执行下载图片的代码。这样,图片的下载过程将在新的线程上进行...

    iphone UITableView异步加载图片

    异步加载图片的基本思想是在主线程之外的其他线程(通常为后台线程)下载和处理图片,避免阻塞用户界面。在UITableView中,我们通常会在cell准备显示时启动图片加载任务,而在图片下载完成后再更新cell的相应视图。 ...

    ios异步加载图片

    2. **GCD异步加载**: - 使用`dispatch_queue_t`创建队列,可以是全局队列或自定义串行/并行队列。 - 使用`dispatch_async`函数将图片下载任务放入队列。 - 图片下载完成后,使用`dispatch_sync`或`dispatch_...

    IOS异步加载缓存图片

    配合异步操作,URLSession可以在后台线程中下载图片,完成后通知主线程进行显示。 6. **GCD(Grand Central Dispatch)**:GCD是苹果提供的多线程解决方案,可以方便地创建并行任务。在图片加载中,我们通常用GCD的...

    iOS 图片异步加载Demo

    在这个Demo中,可能使用URLSession来异步下载图片。 3. **UIImageView Category**:为了简化图片加载,通常会扩展UIImageView,添加一个方法如`setImageWithURL:`。这个方法内部使用异步加载策略,当图片下载完成时...

    swift-一款简单实用的图片下载工具结合了异步下载block回调下载进程管理缓存管理等功能

    JPImageDownloader使用GCD(Grand Central Dispatch)进行异步下载操作,确保图片加载不影响界面的流畅性。 2. **Block回调**:通过使用Block,开发者可以方便地实现下载进度的监听和完成后的处理。例如,当图片...

    uitableview异步加载图片(iOS)

    下面,我们来看一下如何使用SDWebImage进行UITableView的图片异步加载: 1. **安装SDWebImage**:可以使用CocoaPods或Swift Package Manager进行安装。例如,在Podfile中添加`pod 'SDWebImage'`,然后运行`pod ...

    OC-NSNotificationCenter.异步线程下载图片zip

    异步线程下载图片zip` 的标题表明我们将探讨如何利用`NSNotificationCenter` 实现异步下载并解压图片ZIP文件。这个场景常见于网络数据的获取和本地存储,比如在应用启动时或用户请求时,从服务器下载压缩的图片文件...

    OC-performSelectorInBackground异步线程下载图片

    下载完成后,我们使用GCD(Grand Central Dispatch)的`dispatch_get_main_queue()`来确保在主线程更新图片,因为修改UI元素必须在主线程上进行。 需要注意的是,虽然`performSelectorInBackground:withObject:`...

    异步下载网络上的图片并展示

    在移动应用开发中,异步下载网络上的图片并展示是一项常见的需求。这涉及到网络编程、多线程处理、图片缓存以及UI更新等多个知识点。以下将详细解释这些关键概念。 1. **网络请求**:首先,我们需要从网络上获取...

Global site tag (gtag.js) - Google Analytics