015.8.2 第七堂 delegate和block实现下载功能
2015-08-17 21:51
423 查看
用delegate实现下载功能:
1、delegate(代理模式)形式:
(1)数据回调 (2)事件分发 (3)数据配置
2、block 块
3、下载图片:
图1从上至下,如果是视频比较大的文件,会花大量时间停留于图中下载的黄色块中,等待下载结束再继续进行,为用户体验提供了不便。
一般是开辟新线程去做,这次我们使用delegate和block分别完成这个下载任务。
(1)使用delegate :图2 弥补上述缺点 模拟有一个下载任务,真正下载会让另外一个类执行下载,回调的数据用个delegate回调给我们
用block实现下载功能:
代码结果:
1、delegate(代理模式)形式:
(1)数据回调 (2)事件分发 (3)数据配置
2、block 块
3、下载图片:
图1从上至下,如果是视频比较大的文件,会花大量时间停留于图中下载的黄色块中,等待下载结束再继续进行,为用户体验提供了不便。
一般是开辟新线程去做,这次我们使用delegate和block分别完成这个下载任务。
(1)使用delegate :图2 弥补上述缺点 模拟有一个下载任务,真正下载会让另外一个类执行下载,回调的数据用个delegate回调给我们
// // main.m // 下载2 // // Created by tusm on 15-8-17. // Copyright (c) 2015年 tusm. All rights reserved. // #import <Foundation/Foundation.h> #import "MainViewController.h" int main(int argc, const char * argv[]) { @autoreleasepool { MainViewController *mvc=[[MainViewController alloc]init]; [mvc loadImage]; } return 0; } // // MainViewController.h // 下载2 // // Created by tusm on 15-8-17. // Copyright (c) 2015年 tusm. All rights reserved. // #import <Foundation/Foundation.h> #import "Downloader.h" @interface MainViewController : NSObject <DownloaderDelegate> -(void)loadImage; @end // // MainViewController.m // 下载2 // // Created by tusm on 15-8-17. // Copyright (c) 2015年 tusm. All rights reserved. // #import "MainViewController.h" @implementation MainViewController //实现加载图片 -(void)loadImage{ Downloader *loader=[[Downloader alloc]init]; //创建对象 loader.delegate=self; // 到时候传递给我 [loader start]; } //实现代理里的方法 -(void)downloadDidFinishedWithResults:(NSString *)str{ NSLog(@"模拟显示图片的工作"); NSLog(@"%@",str); } @end // // Downloader.h // 下载2 // // Created by tusm on 15-8-17. // Copyright (c) 2015年 tusm. All rights reserved. // #import <Foundation/Foundation.h> @protocol DownloaderDelegate <NSObject>//什么方式回调过去 -(void)downloadDidFinishedWithResults:(NSString *)str;//传个字符串(模拟二进制)做个数据的回调给调用者 @end @interface Downloader : NSObject //为啥是assign @property (nonatomic,assign) id<DownloaderDelegate> delegate; -(void)start;//启动这个下载 @end // // Downloader.m // 下载2 // // Created by tusm on 15-8-17. // Copyright (c) 2015年 tusm. All rights reserved. // #import "Downloader.h" @implementation Downloader -(void)start{ NSLog(@"开始下载"); NSLog(@"下载完毕"); if ([self.delegate respondsToSelector:@selector(downloadDidFinishedWithResults:)]) { [self.delegate downloadDidFinishedWithResults:@"@__@"]; } } @end代码结果:
用block实现下载功能:
// // main.m // block-下载 // // Created by Baocloud-iMac8 on 15/8/2. // Copyright (c) 2015年 宝擎教育. All rights reserved. // #import <Foundation/Foundation.h> #import "MainViewController.h" int main(int argc, const char * argv[]) { @autoreleasepool { MainViewController *mvc = [[MainViewController alloc] init]; [mvc loadImage]; } return 0; }
// // MainViewController.h // dowbn // // Created by tusm on 15-9-10. // Copyright (c) 2015年 tusm. All rights reserved. // #import <Foundation/Foundation.h> @interface MainViewController : NSObject //触发事件 -(void)loadImage; @end
// // MainViewController.m // dowbn // // Created by tusm on 15-9-10. // Copyright (c) 2015年 tusm. All rights reserved. // #import "MainViewController.h" #import "Downloader.h" @implementation MainViewController -(void)loadImage{ //创建对象 调用方法 Downloader *loader=[[Downloader alloc]init]; [loader startWithBlock:^(NSString *results) { NSLog(@"显示图片 %@",results); }];//优点在于触发和实现在一起 调用这个数据(5,)的时候才会使用这个语句 //调用下载器,下载完毕传给我String类型的数据 // 用block实现下载 } @end
// // Downloader.h // dowbn // // Created by tusm on 15-9-10. // Copyright (c) 2015年 tusm. All rights reserved. // #import <Foundation/Foundation.h> //1.定义一个block类型 别名为ComlishBlock typedef void(^ComlishBlock) (NSString *results); @interface Downloader : NSObject //2.定义一个方法 使用block作为参数 接收block -(void)startWithBlock:(ComlishBlock)block; @end
// // Downloader.m // dowbn // // Created by tusm on 15-9-10. // Copyright (c) 2015年 tusm. All rights reserved. // #import "Downloader.h" @interface Downloader() //3.创建一个变量用来保存传递过来的block copy到堆上 //类型ComlishBlock 变量名block @property (nonatomic,copy)ComlishBlock block; @end @implementation Downloader -(void)startWithBlock:(ComlishBlock)block{ //4.保存这个block 保存到实例变量这个block上面去 self.block=block; NSLog(@"请耐心等待"); //5.回调数据 self.block(@"周星驰"); //回调 } @end
代码结果:
相关文章推荐
- 黑马程序员=======总结集合笔记
- 华为OJ(句子逆序)
- LeetCode257——Binary Tree Paths
- hdu(1114)——Piggy-Bank(完全背包)
- Problem G. Pulp Fiction-Gym 100345G-贪心
- 基于Android2.3的车载导航---andorid GPS HAL的移植与分析(by liukun321咕唧咕唧)
- Apache 启动失败 VisualSvn 端口占用问题
- iOS开发需要学习哪些内容?
- java基础及多线程
- static静态初始化块
- Javascript关闭详细说明
- POJ 3762 The Bonus Salary!(费用流)
- 【索引】Geometric Computations in 2D:Exercises: Beginner
- java内存管理:垃圾回收机制
- UVA 12657 Boxes in a Line
- 白话经典算法-快速排序
- 前缀表达式求值
- SecureCRT登录Linux出现中文乱码问题
- 形参和实参 (F#)
- 数据结构--赫夫曼树(最优二叉村)