Objective-C id 指针

此文实际成于 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;

可以看到 idstruct objc_object 的结构指针。

objc-private.h 中可以看到 其更具体的定义。以下是开头部分:

struct objc_object {
private:
    isa_t isa;

public:
}

继承自 struct objc_object的其他子结构

  1. protocol_t
struct protocol_t : objc_object {
}
  1. objc_class
struct objc_class : objc_object {

}
  1. swift_class_t
struct swift_class_t : objc_class {

}

swift_class_t 作为 objc_class子结构,应该为了两者互操作。
objc_class实现中有对是否是 Swift的判断:

    bool isSwift() {
        return bits.isSwift();
    }

你可能感兴趣的:(Objective-C id 指针)