在OC中,两个不同类型的对象也是可以相互赋值的,比如NSString *s和NSNumber *n类型,可以写成s=n;编译器不会报错,但是会提示警告,如果,b是通过NSDictionary或其他容器中获取的,也就是不确定里面的类型,这时候警告也没有。就很容易犯错了。

s=b,实际运行结果

赋值后,s的类型会变成b的类型,在这里就是 NSNumber,运行到这里也不会有什么大的错误,但是,如果后面有用到s的地方,比如调用了NSString的一些特有的方法,但是NSNumber是没有的,因为s已经变成了b的类型,这时候会出现方法无法找到的crash,是crash,所以在不确定类型的时候务必要做类型判断。