首先我们来写一个对象 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 = [objstringByAppendingString:@"123"];
当我们写完这个方法运行的时候就crash掉并且报出错误
-[_NSZeroData stringByAppendingString:]: unrecognized selector sent to instance 0x60000001def0
这个很明显我们在运行后原来的obj对象的类型就变成了NSData类型了
我们可以得出结论,在我们写代码编译的时候,xcode会按照我们赋予的指针类型来判断类型,而我们通过运行的时候则是通过后面具体的实例化对象来判断是什么类型
谢谢!!!
网友评论