求教各位大佬,代码运行过程中变量类型自动改变的情况是怎么回事

qq_35673349 2017-04-19 09:22:12
我写了一个类似这样的代码:


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类型的变量。
...全文
204 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
编天码地 2017-04-20
  • 打赏
  • 举报
回复
如果你想知道底层实现 去研究下 isa指针
编天码地 2017-04-20
  • 打赏
  • 举报
回复
你把一个类型的指针指向 非子类类型的对象没有任何实际意义 你提的问题本身就有问题 这个类型不是自动变化的 不是你手动赋的值吗
无敌帅帅峰 2017-04-20
  • 打赏
  • 举报
回复
你这样写是不符合规范的,每个控件都是不同的类型,如果你要去接收某个控件,最好先判断该控制是不是你要接收的控件类型
编天码地 2017-04-20
  • 打赏
  • 举报
回复
引用 4楼我是你的主体 的回复:
我是从nsuserdefault里面获取数据,用nsstring接收,然后利用str.length进行判断,在判断这运行崩溃。单步到这发现原本是nsstring类型的str变成了long。。。深究了一下为什么一开始写定类型的str会变成其他类型。。。
这个数据不是你自己存的吗 存用什么类型 取就用什么类型啊
qq_35673349 2017-04-20
  • 打赏
  • 举报
回复
居然是变量类型自动转换,而不是变量值被强制转换,这种弱类型的实现方法我想知道怎么避免。。。ISA么。。。我回头去看看
qq_35673349 2017-04-20
  • 打赏
  • 举报
回复
我是从nsuserdefault里面获取数据,用nsstring接收,然后利用str.length进行判断,在判断这运行崩溃。单步到这发现原本是nsstring类型的str变成了long。。。深究了一下为什么一开始写定类型的str会变成其他类型。。。

29,027

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧