iOS面试题-ARC下如何创建栈上的Block
2020-04-13 本文已影响0人
userName
这题主要是考察如何区分栈,堆,还是全局?
其中栈上block的定义:只用到外部局部变量、成员属性变量,且没有强指针引用的block都是StackBlock。
所以
__block int static_k = 3;
__weak void (^myBlock)(void) = ^{
static_k++;
};
myBlock();
NSLog(@"%@",myBlock);
这种一定是栈上的。
然后在ARC上当block捕获到自动变量时,系统就是自动给block copy一次。所以为了避免这次copy还有2种情况。
int temp = 10;
NSLog(@"%@",
^(){
NSLog(@"%d",temp);
});
当block是方法的参数时,系统不会触发copy操作。
- (void)viewDidLoad {
int val = 10;
[self testMethod:^(int num) {
NSLog(@"val=%d",val);
}];
}
- (void)testMethod:(void (^)(int num))block {
NSLog(@"%@",block);
}