Block学习

2016-06-13  本文已影响56人  小如99

之前一直都只知道用block,没有对block进行过总结和深入的理解。

个人觉得block就是一个介于变量和函数中间的指针变量(对象),这个变量有三个技能:

1.有返回值
2.有参数
3.有自己的实现方法
局部变量:
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名称)(参数)
不同点:

  1. 只是作为函数形参的时候,blockname要放到最后,
    -(void)initValue:(float(^)(int))blockname
  2. ^这个符号,只有block写代码块的时候才会放在最前面,其他都是在中间
    NSDictionary *(^block2)(NSString *) = ^NSDictionary *(NSString *pramStr) { return @{@"test1":pramStr,@"test2":@(xValue)}; };
block分类.png

分类总结
1.没有用到外界变量或只用到全局变量、静态变量的block为全局block,生命周期从创建到应用程序结束
2.用到局部变量、成员属性变量的block为栈block,生命周期系统控制,函数返回即销毁
3.有强指针引用或copy修饰的成员属性引用的block会被复制一份到堆中成为堆block,没有强指针引用即销毁,生命周期由程序员控制

上一篇 下一篇

猜你喜欢

热点阅读