美文网首页移动开发俱乐部
Objective-C对象调用方法之nil判断

Objective-C对象调用方法之nil判断

作者: 恩莱客 | 来源:发表于2018-03-15 16:43 被阅读14次

        定义一个对象WeakTestItem,赋值为nil,直接调用其方法,不需要做非空处理。

        __weak WeakTestItem *weakItem = nil;
        [weakItem weakTestFunc];
    

    Debug Area中显示:

    结论1:weakItem的类型是正确的。

        介绍一种对象与类型不一致情况,就是对象的类型是模糊的,此处使用block循环来演示问题。
    下方是构建的一段问题代码:

          __weak WeakTestItem *weakItem = nil;
            NSArray *array = @[@"weak1", @"weak2"];
            [array enumerateObjectsUsingBlock:^(WeakTestItem *obj, NSUInteger idx, BOOL * _Nonnull stop) {
                [obj weakTestFunc];
            }];
    

    Debug Area中显示:


        obj的类型是错误的,所以调用weakTestFunc时就报错了。
    结论2:obj的类型是不正确的。
    修复此块代码:
        NSArray *array = @[@"weak1", @"weak2"];
        [array enumerateObjectsUsingBlock:^(WeakTestItem *obj, NSUInteger idx, BOOL * _Nonnull stop) {
              if ([obj isKindOfClass:[WeakTestItem class]]) {
                  [obj weakTestFunc];
              }
       }];
    

    总结:当确定对象的类型时不需要做非空判断,不确定对象类型时,需要做非空判断。

    相关文章

      网友评论

        本文标题:Objective-C对象调用方法之nil判断

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