block的定义,赋值
2016-05-11 20:45
405 查看
block的定义
block属性或变量格式:返回值类型(^block名称)(参数列表)
可以用strong修饰,也可以用copy修饰,苹果官方建议用copy
@property (nonatomic, strong) void(^myBlock)(); // 无参无返回值 @property (nonatomic, strong) void(^myBlock1)(NSString *); // 带参数 @property (nonatomic, strong) NSString *(^myBlock2)(NSString *); // 带参数与返回值 //定义变量 void(^myBlock)() = nil; // 无参无返回值 void(^myBlock1)(NSString *) = nil; // 带参数 NSString *(^myBlock2)(NSString *) = nil; // 带参数与返回值
block被当做方法的参数
格式:(block类型)参数名称–》
(返回值类型(^)(参数列表)) 参数名称
- (void)test:(void(^)())testBlock//无惨无返回值 - (void)test1:(void(^)(NSString *))testBlock//带参数 - (void)test2:(NSString *(^)(NSString *))testBlock//带参数与返回值
使用typedef定义block
// 以后就可以使用myBlock定义无参无返回值的block typedef void(^myBlock)(); // 使用myBlock1定义参数类型为NSString, 返回中为void的block typedef void(^myBlock1)(NSString *); //使用myBlock2定义参数类型为NSString,返回值也为NSString的block typedef NSString *(^myBlock2)(NSString *); //定义属性 @property (nonatomic, strong) myBlock testBlock; //定义变量 myBlock testBlock = nil; //当做参数 - (void)test:(myBlock)testBlock;
block的赋值
格式:block = ^返回值类型(参数列表){}返回值类型为void时,void可以省略
有返回值时也可以省略返回值类型,开发中一般都省略返回值
没有参数,小括号也可以省略
// 没有参数没有返回值myBlock testBlock = ^void(){ NSLog(@"test"); }; //没有返回值,void可以省略 myBlock testBlock1 = ^(){ NSLog(@"test1"); }; //没有参数,小括号也可以省略 myBlock testBlock2 = ^{ NSLog(@"test2"); }; // 有参数没有返回值myBlock1 testBlock = ^void(NSString *str) { NSLog(str); } // 省略void myBlock1 testBlock = ^(NSString *str) { NSLog(str); } // 有参数有返回值myBlock2 testBlock = ^NSString *(NSString *str) { NSLog(str) return @"hi"; } //有返回值时也可以省略返回值类型 myBlock2 testBlock2 = ^(NSString *str) { NSLog(str) return @"hi"; }
解决block循环引用问题
block中的self,要换成
__weak typeof(self)
__weak typeof(self) selfVc = self;
__weak也可使用__unsafe_unretained,区别就是__weak修饰的指针,当对象销毁后,指针会被自动置为nil,而__unsafe_unretained修饰的指针,当对象销毁后会变成野指针,为了安全,推荐使用__weak
相关文章推荐
- MySQL 数据库学习笔记 2
- 键盘处理
- CQU 牛奶硬盘
- 一位算法工程师对自己工作的反思,写得挺实在的
- 列变位法解密
- openGL 解析ply文件并且显示三维模型
- 代理设计模式 && block设计模式 && KVC\KVO
- JDBC系列:(2)使用Statement执行sql语句
- Deep learning 资料汇总--持续更新
- 记录两个python的小问题
- tableView性能优化cell循环利用 && 自定义cell
- Cordova JqueryMoible 开发
- IOS程序开发-UI基础
- 堆的实现
- 循环结构
- 记录两个python的小问题
- EM算法介绍1
- 记录两个python的小问题
- cnblogs用户体验
- Git 常用命令速查表