xcode7升级后导致奔溃到jsonkit

时间:2021-03-08 21:40:31

升级到xcode7之后,你会神奇的发现你的项目会奔溃到jsonkit里,报thread 1:exc_bad_access(codeexc_i386_gpflt)野指针错误
根据奔溃到jsonkit.m的这行代码void keyObjectISA = ((void **)keys[idx]);
分析得到应该是数据类型不同,从而导致keyObjectISA指针指向空,之后对比xcode6.4与xcode7之下的请求返回数据,如下图(左xcode6.4,右xcode7)
xcode7升级后导致奔溃到jsonkit
会发现xcode7之后会变成NSTaggedPointerString*,那么问题来了,NSTaggedPointerString是什么东西呢?
xcode7升级后导致奔溃到jsonkit
xcode7升级后导致奔溃到jsonkit
由于之前还没有接触过TaggedPointer,现在还在学习中,有想法的各位,可以回复

找到问题:经过俩天的研究,确实证实了之前的判断,导致升级了xcode7和os x10.10之后,程序会奔溃到jsonkit.m void keyObjectISA = ((void **)keys[idx]);这行代码,因为在os x10.10中,NSString采用了TaggedPointer这项技术,此类型不使用解应用isa来获取其所属类,而是通过接下来的三位来查找类表索引的类型,且对象指针最低位置为1。
【译】采用Tagged Pointer的字符串http://www.cocoachina.com/cms/wap.php?action=article&id=13449

解决问题:由于taggedpointer类型不能用isa了,就必须修改为object_getClass(keyObject) ,而且在line:2601处也需要做修改

这里附一个修改过的jsonkit,可以正常使用
http://download.csdn.net/detail/woainiliuwei007/9123789

----iOS研究院 qq群:305044955