面试题答案
一键面试作用
- __block:用于解决block内部无法修改block外部局部变量的问题。它修饰的变量可以在block内部被修改。
- __weak:主要用于解决循环引用问题,修饰的变量不会增加对象的引用计数。
生命周期管理
- __block:如果block被持有,__block修饰的变量也会被持有,直到block释放,变量才会释放。即使block外部的变量作用域结束,只要block还存在,__block变量就会存在。
- __weak:__weak修饰的变量不影响对象的引用计数,当对象的引用计数变为0时,对象被释放,__weak变量会自动被设置为nil,避免野指针。
应用场景
- __block:常用于需要在block内部修改外部局部变量的场景,比如在异步操作中,需要根据block执行结果修改外部变量。
- __weak:广泛应用于解决循环引用问题,特别是在视图控制器与它内部的block之间,或者两个相互引用的对象之间使用block的场景。