调用 nil 对象的 method 之后?

如果对象类型是 Object, 返回 nil; 如果是 int、 bool 等基本类型, 则返回 0.
如果调用 block 则会 crash.

那这几种情况中发生了什么?

首先调用 block 和其他几种不一样, 其他都是 msgSend 的模式, 而调用 block 是读取内存地址来执行的. nil 的 block 还是按照定义的 block 长度去读取地址, 自然读取了其他东西, segmentation fault.

msgSend 的调用模式是 runtime 来判断调用的对象是否为 nil, 从而返回和调用对象相对应的0值对象. id(0) = nil, 0, 0*(指针对象).

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容