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

那些曾经翻车的面试题

作者: 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