此文實際成于 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 類,協(xié)議的基本類型蜓萄。
在 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
中可以看到 其更具體的定義。以下是開頭部分:
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
實現(xiàn)中有對是否是 Swift
的判斷:
bool isSwift() {
return bits.isSwift();
}