您好,欢迎来到知库网。
搜索
您的当前位置:首页iOS block 面试题

iOS block 面试题

来源:知库网

下面请听题

第一题: test会打印什么?因为啥?

typedef void(^TestBlock)(void);
NSString *test = @"test1111";
    
    TestBlock b2 = ^(void){
        NSLog(@"%@",test);
    };
    test = @"test2222";
    b2();
  • 答案是test1111
原因:
  • 当在Block内部“访问”外部变量时,Block会对外部的变量进行一次"临时“的”拷贝“;
  • 临时拷贝的结果:把栈区的地址拷贝到堆区
  • 其实,在Block内部操作的是拷贝出来的那一份, 对Block外部的变量的真实值不会造成影响。

第二题: label会显示什么字样?

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 300, 300, 40)];
    
    label.text = @"block作用域外赋值++++";
    
    void (^backValue)(NSString *) = ^(NSString *str) {
        
        label.text = str;
        
    };
    
    backValue(@"block作用域内赋值------");
    
    [self.view addSubview:label];
  • 答案是block作用域内赋值------
原因:
  • 这是对label的使用,而不是赋值,操作的是label一个属性,下面的是赋值操作
label = [[UILabel alloc] init];

Copyright © 2019- zicool.com 版权所有 湘ICP备2023022495号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务