此文实际成于 2015/07/28
What is 'id'
Question from https://www.quora.com/What-are-some-good-questions-to-test-someones-Objective-C-and-iOS-Development-skills
id
是任何 Objective-C 类,协议的基本类型。
在 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
是 struct objc_object
的结构指针。
在 objc-private.h
中可以看到 其更具体的定义。以下是开头部分:
struct objc_object {
private:
isa_t isa;
public:
}
继承自 struct objc_object的其他子结构
- protocol_t
struct protocol_t : objc_object {
}
- objc_class
struct objc_class : objc_object {
}
- swift_class_t
struct swift_class_t : objc_class {
}
swift_class_t
作为 objc_class
子结构,应该为了两者互操作。
objc_class
实现中有对是否是 Swift
的判断:
bool isSwift() {
return bits.isSwift();
}