美文网首页
那些曾经翻车的面试题

那些曾经翻车的面试题

作者: itclimb | 来源:发表于2018-05-22 16:59 被阅读15次
    1. 下面代码会输出什么?
        int a = 3;
        void (^myblock)(void) = ^(){
            NSLog(@"%d",a);
        };
        myblock();
        a = 4;
        myblock();
    
    // 正确结果: 3 3
    

    通过打印的地址得知, 在Block内部和外部变量a的地址不一样, Block内部对变量a进行了默认copy操作, 外部变量a的值的改变不会影响到Block内部. 并且copy后的值存放于堆区(尚待验证).
    Tips:
    1). Block内部不能直接修改外部变量的值, 如果修改需要在外部变量定义前加上关键字 _ _block ;
    2). Block内部可以定义和Block外部相同名的变量, 此时内部的变量会在Block作用域内暂时屏蔽外部变量, 且内部定义的变量也在栈区.

    1. nil, Nil, NSNull, NULL分别用在什么场合?

    iOS中的四大皆空:

    标志 含义
    NULL (void *) 0 C指针的字面零值
    nil (id) 0 Object-C对象的字面零值
    Nil (Class) 0 Object-C类的字面零值
    NSNull [NSNull null] 用来表示零值的单独的对象

    相关文章

      网友评论

          本文标题:那些曾经翻车的面试题

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