oc-class的bits的赋值时机

2020-10-22  本文已影响0人  浪的出名

引言

 Person *p = [Person alloc]; //打下断点
 [p run];

// 打印的数据
(lldb) x/4gx Person.class
0x100002520: 0x00000001000024f8 0x00000001003f0140
0x100002530: 0x00000001003ea460 0x0000802400000000
static Class realizeClassWithoutSwift(Class cls, Class previously)
{
     ......
    auto ro = (const class_ro_t *)cls->data();
     ......

// 打印的数据
x/4gx cls
0x100002540: 0x0000000100002518 0x00000001003f0140
0x100002550: 0x00000001003ea460 0x0000000000000000
......
// Set fastInstanceSize if it wasn't set already.
    cls->setInstanceSize(ro->instanceSize);
......
// 打印数据
(lldb) x/4gx 0x100002540
0x100002540: 0x0000000100002518 0x00000001003f0140
0x100002550: 0x00000001003ea460 0x0000002000000000
......
// Copy some flags from ro to rw
    if (ro->flags & RO_HAS_CXX_STRUCTORS) {
        cls->setHasCxxDtor();
        if (! (ro->flags & RO_HAS_CXX_DTOR_ONLY)) {
            cls->setHasCxxCtor();
        }
    }
......
// 打印数据
(lldb) x/4gx 0x100002540
0x100002540: 0x0000000100002518 0x00000001003f0140
0x100002550: 0x00000001003ea460 0x0000002400000000
上一篇 下一篇

猜你喜欢

热点阅读