对于isa指针的影响
因为tagged pointer 不是一个真正的对象,如果使用isa指针在编译时会报错。
如图:
提示我们改为object_getClass()
object_getClass()中做了相应的处理
由于object_getClass()没有对应的实现,只能从其他地方窥探一二
objc-weak.mm
weak_read_no_lock(weak_table_t *weak_table, id *referrer_id)
{
objc_object **referrer = (objc_object **)referrer_id;
objc_object *referent = *referrer;
if (referent->isTaggedPointer()) return (id)referent;
//...
}
inline bool
objc_object::isTaggedPointer()
{
#if SUPPORT_TAGGED_POINTERS
return ((uintptr_t)this & TAG_MASK);
#else
return false;
#endif
}
这里取对象的值做了一些判断
如果是tagged pointer , 对象的值就是指针
如果非tagged pointer , 对象的值是指针指向的内存区域中的值
总结











