译文-arm64位isa指针具体含义

不仅仅是指针-(Non-pointer isa)

在arm64位下iOS操作系统,Objective-C对象的isa区域不再只是一个指针。

Say what?

如果他不是一个指针,那它是什么?

isa的一些位还编码着指向对象类的指针。但是不管是OSX还是iOS实际上将这64位的地址空间都用上了。Objective-C运行时系统会用这些多余位存储没个对象的一些数据比如他的引用计数(retain count)或者是它是否含有弱引用。

为什么这么改变

性能。重复利用这些没用的位提高运行速度还会减少内存空间。在iOS7关注的是对retain/release 和alloc/dealloc的优化。这一点就做到了这个。

这对我的代码来说意味着什么

不要再直接读取obj->isa。否则编译器会发出警告。编译器是你的朋友。尝试用[obj class]或者object_getClass(obj)代替。
不要直接写obj->isa。用object_setClass()代替。
如果你重写了+allocWithZone:方法,你可能初始化你对象的isa称为一个“未加工”的isa指针。如果你这样做了,将没有多余的数据存储在isa还会导致你调用retain/release缓慢。为了使这些优化有效,使用object_setClass()取代设置isa为0。
如果你重写retain/release去实现一个自定义内置的引用计数,考虑移除这个代码为了支持runtime的自己的实现。iOS 64位模拟器目前不在使用non-pointer isa.需要测试自己的的代码在arm64位真机上。

这对调试来说意味着什么?

调试器知道如何从isa区域解码类。你不需要在很多情况下自己检测他。
你可以设置换将变量OBJC_DISABLE_NONPOINTER_ISA=YES来不使用non-pointer isa对于所有类。如果你代码运行失败在这个变量下,你可能直接不正确的使用了一个isa在一些地方。
如果你自己写一个调试器一样的工具,Objective-C运行时一些接口会帮助你在isa中解码出变量。objc_debug_isa_class_mask描述了哪的位是类指针!用这个公式就可以得到(isa & class_mask) == class pointerobjc_debug_isa_class_mask和objc_debug_isa_magic_value描述了一些位去帮助你区分有效的isa区域还有一些无效的区域:(isa & magic_mask) == magic_value这样获得的isa就是一个未经加工的类指针。这些变量可能在未来改变所以不要在application 代码中使用。

没有任何秘密,其他位是什么意思?

仅仅是娱乐目的。这些值可能会在在未来版本改变。我认为他们已经改变了。。。

名称 说明
1bit indexed 0 is raw isa, 1 is non-pointer isa.
1bit has_assoc Object has or once had an associated reference. Object with no associated references can deallocate faster.
1bit has_cxx_dtor Object has a C++ or ARC destructor. Objects with no destructor can deallocate faster.
30bit shiftcls Class pointer's non-zero bits.
9bit magic Equals 0xd2 Used by the debugger to distinguish real objects from uninitialized junk.
1bit weakly_referenced Object is or once was pointed to by an ARC weak variable. Objects not weakly referenced can deallocate faster.
1bit deallocating Object is currently deallocating
1bit has_sidetable_rc Object's retain count is too large to store inline.
19bit extra_rc Object's retain count above 1. (For example, if extra_rc is 5 then the object's real retain count is 6)

原文地址
如果不当请提出,欢迎讨论!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容