iOS部分结构底层代码

120 阅读1分钟

Block

struct __block_impl {
  void *isa;
  int Flags;
  int Reserved;
  void *FuncPtr;
};

Autoreleasepool

struct __AtAutoreleasePool {  
__AtAutoreleasePool() {atautoreleasepoolobj = objc_autoreleasePoolPush();} 
 ~__AtAutoreleasePool() {objc_autoreleasePoolPop(atautoreleasepoolobj);}
  void * atautoreleasepoolobj;
};

class_rw_t

struct class_rw_t {    uint32_t flags;    uint32_t version;    const class_ro_t *ro;    method_array_t methods;    property_array_t properties;    protocol_array_t protocols;    Class firstSubclass;    Class nextSiblingClass;    char *demangledName;    void setFlags(uint32_t set)     {        OSAtomicOr32Barrier(set, &flags);    }    void clearFlags(uint32_t clear)     {        OSAtomicXor32Barrier(clear, &flags);    }    // set and clear must not overlap    void changeFlags(uint32_t set, uint32_t clear)     {        assert((set & clear) == 0);        uint32_t oldf, newf;        do {            oldf = flags;            newf = (oldf | set) & ~clear;        } while (!OSAtomicCompareAndSwap32Barrier(oldf, newf, (volatile int32_t *)&flags));    }};