美文网首页iOS成长日记
ios 编译时和运行时指针类型

ios 编译时和运行时指针类型

作者: 傍晚我陪着你 | 来源:发表于2017-08-09 11:59 被阅读17次

首先我们来写一个对象 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会按照我们赋予的指针类型来判断类型,而我们通过运行的时候则是通过后面具体的实例化对象来判断是什么类型


谢谢!!!

相关文章

  • ios 编译时和运行时指针类型

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

  • Java多态

    Java多态 编译时类型和运行时类型 理解编译时类型和运行时类型是理解多态的关键 上最直白的定义: Java的引用...

  • swift的类之多态(Polymorphism)和类型转换

    Swift的引用变量有连个类型:编译时类型和运行时类型。编译时类型由声明该变量时使用的类型决定,编译器只认每个变量...

  • iOS 运行时和编译时区别(转)

    一、概念 编译时 运行时 二、例子说明: 1.string在编译时和运行时分别时什么类型的对象?NSString*...

  • 多态

    Java引用变量由两个类型:一个是编译时类型,一个是运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型...

  • 问题:对于语句NSString*obj = [[NSData a

    编译时是 NSString 的类型 运行时是 NSData 类型的对象

  • Java基础积累之instanceof

    使用instanceof的场景 首先先要明确Java中存在编译时类型和运行时类型,比如 Object obj = ...

  • 类加载机制与反射(二)

    通过反射查看类的信息 Java程序中许多对象在运行时都会出现两种类型:编译时类型和运行时类型例如:Person p...

  • Go中的panic与recover机制

    panic Go的类型系统会在编译时捕获很多错误,但有些错误只能在运行时检查,如数组访问越界、空指针引用等。这些运...

  • C语言模拟实现多态

    C++的多态分为编译时多态的函数重载和运行时的虚函数. 一个基类类型的指针可以指向派生类的对象, 调用虚函数的时候...

网友评论

    本文标题:ios 编译时和运行时指针类型

    本文链接:https://www.haomeiwen.com/subject/hhifrxtx.html