iOS编译时类型与运行时类型

本文探讨了在使用Xcode进行Objective-C编程时遇到的类型不匹配问题,特别是当尝试将NSData对象作为NSString对象使用时出现的警告与运行时错误,并解释了编译时类型检查与运行时类型判断之间的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先我们来写一个对象 NSString *obj = {[NSData alloc] init];

一般来说我们写完上面的代码xcode会为我们提示一个warning:Incompatible pointer types intializing 'NSString *' with an expression of type 'NSDara'提示我们的obj对象指向的是一个NSData的方法,而不是NSString的,这个时候我们编译Xcode是以NSString为编译类型编译的,如果继续按照NSSting类型的方法写,理论上不会出错误

例如我们可以写一个NSSting的类方法:

obj = [obj stringByAppendingString:@"123"];

当我们写完这个方法运行的时候就crash掉并且报出错误

-[_NSZeroData stringByAppendingString:]: unrecognized selector sent to instance 0x60000001def0

这个很明显我们在运行后原来的obj对象的类型就变成了NSData类型了

我们可以得出结论,在我们写代码编译的时候,xcode会按照我们赋予的指针类型来判断类型,而我们通过运行的时候则是通过后面具体的实例化对象来判断是什么类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值