1之前在用到服务器请求的数据时总是习惯用代理传值的方法
然后还要在请求体中进行传值
然后在需要用到数据的地方声明代理,添加代理方法
然后再数据请求中对服务器传来的数据进行操作,以微信支付的例子比如
当然不要忘了协议
这样就用了代理传值的方法,做到了把数据从服务器进行请求,然后传到需要用的控制器里面,在代理方法里面进行对值的操作。中间一个小插曲,就是当我们进行网络请求有时候会因为网络也或者服务器等原因长时间请求的状态。这时候我们可以加一个对请求时间的的条件
这样等30秒以后就会自动返回请求超时的提示。(系统默认的时间是60S,若请求不到数据就会提示请求超时)。
***********************************************************************************
大招来了
2.其实我们发现用代理传值的方法对服务器取值有些拖沓,会有点麻烦。其实这时候用Block回调会更简单一点呢
//1.使用typedef定义一个block
typedef void(^CallBack1)(); //不带参数
typedef void(^CallBack2)(NSString *test); //带参数
//2.通过属性声明
@property (nonatomic, copy) CallBack callBack;
//3.通过函数方法声明
- (void)functionCallBack:(CallBack)callBack;
typedef void(^Success)(id responseObject); typedef void(^Failure)(NSError *error);用这2句话回调当请求成功或者失败之后的数据。然后发起请求
只用这一个方法就实现了对数据的请求和调用。直接用类对象调用。就这样免去了很多繁杂的程序。当然我们使用这个的时候最好使用单例来创建网络请求类的对象,这样更安全
这样调用起来其实更舒服。
当然,如果block用的比较熟悉了,还可以这样
@property (nonatomic, strong) void(^ completed1)();//不带参数
@property (nonatomic, strong) void(^ completed2)(NSString *test);//带参数
- (void) functionCallBack:(void(^)())completed1;//不带参数
- (void) functionCallBack:(void(^)(NSString *test))completed2;//带参数
-------SAW
网友评论