如果对象类型是 Object, 返回 nil; 如果是 int、 bool 等基本类型, 则返回 0.
如果调用 block 则会 crash.
那这几种情况中发生了什么?
首先调用 block 和其他几种不一样, 其他都是 msgSend 的模式, 而调用 block 是读取内存地址来执行的. nil 的 block 还是按照定义的 block 长度去读取地址, 自然读取了其他东西, segmentation fault.
msgSend 的调用模式是 runtime 来判断调用的对象是否为 nil, 从而返回和调用对象相对应的0值对象. id(0) = nil, 0, 0*(指针对象).