美文网首页
NullSafe 的原理是什么

NullSafe 的原理是什么

作者: Zorin | 来源:发表于2017-10-28 22:12 被阅读67次

    NullSafe is a simple category on NSNull that returns nil for unrecognised messages instead of throwing an exception
    当给一个NSNull对象发送消息的话, 可能会崩溃 (null 是有内存的), 而发给nil 的话,是不会崩溃的.
    作者就是使用了这么一个原理, 把发送给NSNull 的而NSNull 又无法处理的消息经过如下几步处理:

    1. 创建一个方法缓存,这个缓存会缓存项目中类的所有类名;
    2. 遍历缓存,寻找是否已经有可移执行此方法的类;
    3. 如果有的话,返回这个NSMethodSignature;
    4. 如果没有的话,返回nil ,接下来会走 forwardInvocation:方法;

    [invocation invokeWithTarget:nil];将消息转发给nil.
    那么,如何判断NSNull 无法处理这个消息呢,在OC中,系统如果对某个实例发送消息之后,它(及其父类)无法处理(比如,没有这个方法等), 系统就会发送methodSignatureForSelector消息,如果这个方法返回非空,那么就会执行返回的方法,如果为nil ,则发送forwardInvocation 消息.
    题外话: 一般来说,我们不应该在我们的项目中使用NSNull类(大部分NSNull 类的来源来自接口的返回),而使用nil,在来源上,就应该堵上(要么你解析到null尽心处理,要么和你的服务器说,不要给我返回null).

    相关文章

      网友评论

          本文标题:NullSafe 的原理是什么

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