之前一直都只知道用block,没有对block进行过总结和深入的理解。
个人觉得block就是一个介于变量和函数中间的指针变量(对象),这个变量有三个技能:
1.有返回值
2.有参数
3.有自己的实现方法
- block的定义
局部变量:
returnType (^blockName)(parameterTypes) = ^returnType(parameters) {...};
成员变量:
@property (nonatomic, copy) returnType (^blockName)(parameterTypes);
函数形参:
- (void)someMethodThatTakesABlock:(returnType (^)(parameterTypes))blockName;
函数实参:
[someObject someMethodThatTakesABlock:^returnType (parameters) {...}];
typedef:
typedef returnType (^TypeName)(parameterTypes);
TypeName blockName = ^returnType(parameters) {...};
总结block的定义:
其实跟函数一样:
-(void)funciton:(NSString *)str
-(返回值)函数名(参数)
void(^function)(NSString **)
返回值(block名称)(参数)
不同点:
- 只是作为函数形参的时候,blockname要放到最后,
-(void)initValue:(float(^)(int))blockname
- ^这个符号,只有block写代码块的时候才会放在最前面,其他都是在中间
NSDictionary *(^block2)(NSString *) = ^NSDictionary *(NSString *pramStr) { return @{@"test1":pramStr,@"test2":@(xValue)}; };
- block的思维导图
内容摘自 iOS之轻松上手block
分类总结
1.没有用到外界变量或只用到全局变量、静态变量的block为全局block,生命周期从创建到应用程序结束
2.用到局部变量、成员属性变量的block为栈block,生命周期系统控制,函数返回即销毁
3.有强指针引用或copy修饰的成员属性引用的block会被复制一份到堆中成为堆block,没有强指针引用即销毁,生命周期由程序员控制