美文网首页iOS面试
iOS block 面试题

iOS block 面试题

作者: Double丶K | 来源:发表于2018-12-12 13:34 被阅读164次

    下面请听题

    第一题: 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];
    

    相关文章

      网友评论

        本文标题:iOS block 面试题

        本文链接:https://www.haomeiwen.com/subject/dtdjaftx.html