转载

block的使用

理论支持:

好像没什么......

实践:

两个类

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没有提示比较麻烦,当然也可以用这个快速提示:

block的使用

OK,完成。

正文到此结束
Loading...