从swift 4.0之后,项目中JSON转Model(我们Model都用的struct)就转而使用Codable
了,之前一直相安无事。但是最近一个版本低端机器(iPhone 4s/iPhone 5/iPhone 5c)的用户出现crash。内容看出是转Model的时候crash的。
// T: Codable
let object = try JSONDecoder().decode(T.self, from: data)
看着这行代码。百思不得其解,json返回没问题,其他机器上运行也没问题。这句话看不出半点毛病。
无奈只好把打印的json字符串copy出来,把model关系copy出来,然后解析,去一行行注释属性,结果发现,我随便注释任意一个属性,就可以解析成功了。我们一对象地下有很多对象,还要对象数组,所有属性加起来差不多快200个了,我以为低端机器上达到JSONDecoder
解析上线了,可能内存不够用,我就删除了几个属性,然后这个接口就正常了
然后我继续拿着5c测试其他页面,另一个页面的接口有两个,返回值不太一样,我用一个普通的(没实现Codable)的struct把两个返回的对象包装起来,这时我发现只要我使用这个struct就会立即crash,我意识到应该是struct的问题,代码已经写完也不可能改太多,我把包装的struct改成class , 就正常了。
总结下,不要写层次过多而且属性过多的struct,低端机器内存不够用,这种值类型会直接crash。
网友评论