问题描述
使用带block的构造方法,编译的时候出现警告:
警告信息:Variable 'pointsRuleView' is uninitialized when captured by block
我百度后知道加上__block
可以消除此警告:
我想请教的是:__block
在这里到底做了什么?
使用带block的构造方法,编译的时候出现警告:
警告信息:Variable 'pointsRuleView' is uninitialized when captured by block
我百度后知道加上__block
可以消除此警告:
我想请教的是:__block
在这里到底做了什么?
具体需要了解block 的捕获规则. 下面简单介绍一下, 可能不特别准确, 不过大概能明白就好.
第一个情况, 在block 捕获pointsRuleView 时, 由于此时, 还没有返回, 导致 pointsRuleView 的值未定义, block 捕获到的可能是nil, 所以编译器会给你警告.
第二个情况, 加入了__block 关键字, 在arc 的情况, 可以认为简单理解为将pointsRuleView 从局部变量提升为全局变量, block 中的 pointsRuleView 值就可以正常获取了.
以上只是简化的答案, 具体可以看看ios 进阶之类的书了解block 的实现细则.