block基本使用
- 在日常的开发中,我们经常会用到block,或者说是使用block来减少我们的代码量,比如说:控制器之间的传值,虽然使用代理等也可以实现,但是使用代理的时候代码量比较大,这个时候使用block就会很方便。
- 最常用的就是在处理网络请求的时候,有返回值的时候需要执行的代码,自己封装的时候通常都是使用block(当然了,AFNetworking内部就是使用了大量的block)
-
block的作用:block的作用和函数和方法很像,就是用来保存一段代码,等到需要的时候再去调用
block的定义
- 想知道Block如何定义??在Xcode中输入
inlineBlock,将会出现的代码段就是Block的定义方法.
returnType(^blockName)(parameterTypes) = ^(parameters) {
statements
};
// 注意:当有参数的时候,左右两边的写法是不一样的,左边只需要参数的类型,不需要参数名,但是右边的需要参数类型和参数
// 有返回值有参数的
返回值(^block名称)(参数列表) = ^(参数列表){
};
//没有返回值有参数
void(^block名称)(参数列表) =^(参数列表){
};
//没有返回值没有参数
void(^block名称)() = ^{
};
使用
- 定义成属性
-
定义成属性的时候需要使用copy,也不需要带“”*
- 在ARC中可以使用strong和copy,但是在MRC中只能使用copy
// 第一种方法
// 先定义一个别名
typedef void(^YWBlock)(NSString *name);
// 声明一个属性
@property(nonatomic, copy) YWBlock ywBlock;
// 第二种方法
// 直接写在属性中
@property(nonatomic, copy) void(^YWBlockType)(NSString *name);
// 推荐使用这种方法,block的定义写在方法声明中,这样看起来比较直观
// 在方法实现的时候能看到里面有什么参数,是什么类型的
- (void)testWithSuccess:(void(^)(NSString *str1, int tt))success;
// 这种方式声明的也没错,但是阅读性不好
// 在方法实现中也不好用
typedef void(^failedBlock)(NSString *str1, int tt);
- (void)testWithFailed:(failedBlock)failed;
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。