zoukankan      html  css  js  c++  java
  • iOS 线程操作库 PromiseKit

    iOS 线程操作库 PromiseKit 

    官网:http://promisekit.org/

    github: https://github.com/mxcl/PromiseKit/tree/master

     一:安装

    • 第一种方式使用 cocoaPods 
    • 直接安装方式:下载PromiseKit 先如图文件导入你的项目 
    • 然后,再导入 Chuzzle.h,m 文件 两个文件 下载:https://github.com/mxcl/ChuzzleKit

    二:使用

    我们演示一个异步下载图片,然后加载到  imageView上;

    我们传统的GCD做法:

        //创建imageView
        UIImageView *theImageV = [[UIImageView alloc]initWithFrame:CGRectMake(50, 100, 200, 200)];
        theImageV.backgroundColor = [UIColor grayColor];
        [self.view addSubview:theImageV];
        
        
        //图片链接
        NSString *imageURL = @"http://f.hiphotos.baidu.com/image/w%3D2048/sign=5545a5d7af4bd11304cdb0326e97a60f/2f738bd4b31c87013c5bf342257f9e2f0608ffa1.jpg";
        
        //异步加载图片并显示
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            
            NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:imageURL]];
            
            //回到主线程刷新UI
            dispatch_async(dispatch_get_main_queue(), ^{
                theImageV.image = [[UIImage alloc]initWithData:data];
            });
    
        });

    使用 Promise的做法

        //使用Promise
        dispatch_promise(^{
            
            
            NSString *imageURL = @"http://g.hiphotos.baidu.com/image/h%3D1050%3Bcrop%3D0%2C0%2C1680%2C1050/sign=9a06c1578fb1cb1321693813e8646d2d/1b4c510fd9f9d72acef7baa5d62a2834359bbbf3.jpg";
            return imageURL;
            
            
        }).then(^(NSString *url){
            
            NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
            return data;
            
        }).then(^(NSData *data){
            
            theImageV.image = [[UIImage alloc]initWithData:data];
    
        });

     三:使用 PromiseKit+UIKit :

    #import "PromiseKit+UIKit.h" 

       

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"You Didn’t Save!"
                                                        message:@"You will lose changes."
                                                       delegate:nil
                                              cancelButtonTitle:@"Cancel"
                                              otherButtonTitles:@"Lose Changes", @"Panic", nil];
        
        alert.promise.then(^(NSNumber *dismissedIndex){
            
            NSLog(@"clock index : %@",dismissedIndex);
            
        });

    四:从上面的两个例子,我们可以看出 PromistKit ,可以理解为每一次操作都是一个 Promise 即承诺,每一个承诺都将有一个结果,所以就有了 .then.then,,,.cath

    这种方式的写法,线程更安全,代码更友好

    参考:http://promisekit.org/

  • 相关阅读:
    Vim快捷键,行首行尾
    java程序 cpu占用过高分析
    svn merge操作
    linux root用户无法删除文件,提示permission denied
    诡异问题:tomcat启动一直卡住,strace跟踪提示apache-tomcat核心文件找不到。
    转:xcode项目打不开:incompatible project version问题
    路由器当交换机用
    visual studio远程调试 remote debugger
    Sql server锁
    long 在不同操作系统下所占用的字节数
  • 原文地址:https://www.cnblogs.com/cocoajin/p/3691577.html
Copyright © 2011-2022 走看看