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];
}
}];
总结:当确定对象的类型时不需要做非空判断,不确定对象类型时,需要做非空判断。