此文實(shí)際成于 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 類(lèi),協(xié)議的基本類(lèi)型。
在 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 的結(jié)構(gòu)指針。
在 objc-private.h 中可以看到 其更具體的定義。以下是開(kāi)頭部分:
struct objc_object {
private:
isa_t isa;
public:
}
繼承自 struct objc_object的其他子結(jié)構(gòu)
- 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子結(jié)構(gòu),應(yīng)該為了兩者互操作。
objc_class實(shí)現(xiàn)中有對(duì)是否是 Swift的判斷:
bool isSwift() {
return bits.isSwift();
}