美文网首页
iOS (二)id类型

iOS (二)id类型

作者: ePan | 来源:发表于2017-09-19 19:19 被阅读0次

id的声明

在usr/include /objc / objc.h里面有:

/// An opaque type that represents an Objective-C class.
typedef struct objc_class *Class;

/// Represents an instance of a class.
struct objc_object {
    Class isa  OBJC_ISA_AVAILABILITY;
};

/// A pointer to an instance of a class.
typedef struct objc_object *id;

所以,id可以用于指向所有的Objective-C对象,是一种万能指针,类似于C语言中的void*。

NSObject *

NSObject *可以指向所有继承自NSObject的类生成的对象。在Objective-C中,几乎所有类都是继承自NSObject,但是也有例外,比如NSProxy就并非继承自NSObject。

所以,NSObject *能够指向的范围比id要小一些。

id表示基础类型

其实,id 还可以表示基础类型,但是不能表示float,double类型。

在MRC中,id可以表示int、NSInteger、BOOL等类型(虽然会有警告),但是在ARC中会报错。即使在MRC中,也不能表示float,double类型。

id的作用

1、可以用于动态绑定。编译器看到id以后,认为是动态类型,不再检查类型。

2、多态, 可以减少代码量, 避免调用子类特有的方法需要强制类型转换

3、可以用于代理(delegate)。在声明代理的时候,根本不用关心代理的类型是什么。

4、有的时候,你不知道变量的类型,就可以使用id。比如,在一个存储着NSString和NSNumber和数组中,想要找出所有的字符串。由于不确定取出的元素是哪种类型,就可以使用id进行声明,然后再判断类型。

相关文章

  • iOS (二)id类型

    id的声明 在usr/include /objc / objc.h里面有: 所以,id可以用于指向所有的Objec...

  • iOS中id类型

    id 类型是iOS中一种特殊的动态数据类型,其存在价值: id是一种通用的对象类型,她可以用类存储属于任何类的对象...

  • iOS二进制数据与js的透传

    iOS原生的数据类型传递到js端的转换如下。 id类型会转换成Wrapper object。有时候,iOS这边的通...

  • iOS中的id类型

    /*id是一个数据类型, 并且是一个动态数据类型既然是数据类型, 所以就可以用来1.定义变量2.作为函数的参数3....

  • iOS id类型实现原理

    本文会阐述下面几个问题1、什么是id类型2、id类型的赋值问题3、id类型对象在调用方法的时候编译期和运行时的规则...

  • iOS的动态性

    1、iOS的动态性来自三个方面:动态类型、动态绑定、动态载入、SEL类型 1、动态类型<弱类型>(id):在代码的...

  • 高级动画学习心得笔记(二)寄宿图

    2.寄宿图 2.1 contents属性 2.1.1类型为id (在ios上只能赋值CGImageRef类型,其它...

  • iOS看源码:Class和isa

    首先看看iOS源码中 对类的定义: 从上面可以看到 Class类型就是objc_class结构体指针。 id类型就...

  • id类型

    1.静态类型和动态类型 id是一个数据类型, 并且是一个动态数据类型既然是数据类型, 所以就可以用来1.定义变量2...

  • 寄宿图

    contents属性 定义类型为id,但ios上必须赋值 CGImage,否则图层显示为空 (Mac OS 上 可...

网友评论

      本文标题:iOS (二)id类型

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