理论支持:
好像没什么......
实践:
两个类
NSObjectDownFile(是一个专门处理下载相关的代理类)
ViewController(呈现NSObjectDownFile处理完的数据)
首先明确:是NSObjectDownFile把数据传递到ViewController,ViewController负责呈现.
所以block写在NSObjectDownFile.h
typedef void(^ReviceData)(double value); @interface NSObjectDownFile : NSObject<NSURLConnectionDataDelegate>
然后写一个方法接收ViewController传递过来的block
-(void)setReceiveDataBlock:(ReviceData)reviceData0;
及在NSObjectDownFile.m的实现
/** * 接受传入的block * * @param reviceData0 传入的block */ -(void)setReceiveDataBlock:(ReviceData)reviceData0 { if (reviceData0) { reviceData=nil; reviceData=[reviceData0 copy]; } }
reviceData是一个全局的block对象用以保证NSObjectDownFile传递数据时随时都可以使用
@implementation NSObjectDownFile { //表盘角度 ReviceData reviceData; }
然后NSObjectDownFile传递数据时直接使用就可以了
reviceData([self speedToValueAndSpeed:speed]);
ViewController是呈现传递过来的数据,所以初始化应该在ViewController.m文件
引入NSObjectDownFile文件
@interface ViewController () { NSObjectDownFile* downFile; }
[downFile setReceiveDataBlock:^(double value) { //表盘数值 [weakGague setValue:value animated:YES]; }];
至此就完成了 ,用方法的形式写block好处就是初始化时有提示很方便。
下面这种就是直接传递block了。
首先在NSObjectDownFile.h文件中声明block并设置为其属性(也是为了全局可以使用)
typedef NSString*(^ButtonTitle)(NSString* title); @property(nonatomic,copy)ButtonTitle buttonTitle;
然后在传递数据的时候使用即可
self.buttonTitle(@"SSSSSSSSS");
block的初始化也是在ViewController.m里,只是稍微有点不同
首先得初始化一个与使用的block相同的block,然后再传递给NSObjectDownFile对象
NSString*(^ButtonTitle0)(NSString*) = ^(NSString* title) { return title; }; downFile.buttonTitle=ButtonTitle0;
这样主要就是写block没有提示比较麻烦,当然也可以用这个快速提示:
OK,完成。