我写了一个类似这样的代码:
UIView *view = [[UIView alloc] init];
UIWindow *window = [[UIWindow alloc] init];
NSString *str = [[NSString alloc] init];
NSNumber *num = [[NSNumber alloc] initWithLong:1];
//一开始view是UIview*类型
view = window;
//view现在变成了UIWindow*类型
view = str;
//view现在变成了NSString *类型
view = num;
//view现在变成了long类型
str = num;
//str变成了long类型
感觉这种方式和c/c++/Java什么的不太一致,请问各位大佬们哪里有相关的描述?(有大佬亲自解答就更好了)
ps:我是在xcode上加断点看的类型,str变成long类型之后,str.length属性运行都会报错,所以str应该真的变成了long类型的变量。

解决方案 »

  1.   

    如果你想知道底层实现 去研究下 isa指针
      

  2.   

    我是从nsuserdefault里面获取数据,用nsstring接收,然后利用str.length进行判断,在判断这运行崩溃。单步到这发现原本是nsstring类型的str变成了long深究了一下为什么一开始写定类型的str会变成其他类型
      

  3.   

    居然是变量类型自动转换,而不是变量值被强制转换,这种弱类型的实现方法我想知道怎么避免ISA么我回头去看看