移动开发俱乐部

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

2018-03-15  本文已影响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];
          }
   }];

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

上一篇下一篇

猜你喜欢

热点阅读