-
对于id类型的变量,调用任何方法都能够通过编译(调用不存在的方法时候会抛出运行时错误)
id类型可以存储任何类型的对象,无法通过—>来获取类的实例变量和方法。
-
id类型和定义了为其他类型的对象可以相互赋值
赋值操作包括=
赋值,传参数,和返回值。
-
强类型变量(静态类型),如果调用类或者父类中不存在的方法,编译器会抛出警告
-
若是静态类型变量,子类型的实例变量可以赋值给父类的实例变量
-
若是静态类型变量,父类型的实例变量不可以赋值给子类的实例变量
-
判断哪个类的方法被执行,需要查看实际执行这个变量的类型(动态性)
-
id类型
为什么id 类型 不是 *id 呢?
看objc/objc.h
中的定义
/// A pointer to an instance of a class.
typedef struct objc_object *id;
A pointer to an instance of a class.意思是指 id是指向类实例的一个指针,所以id本身就是一个指针,不需要加*号了。
网友评论