更新至 iOS 13.4 / XCode 11.4 后,这段代码:
func getSubclassInfos() -> [ClassInfo] {
let superObject = CityModel.self
let superClassInfo = ClassInfo(superObject)
var subclassList = [ClassInfo]()
var count = UInt32(0)
guard let classList = objc_copyClassList(&count) else {
return subclassList
}
for i in 0..<Int(count) {
let clazz = classList[i] // Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
if let classInfo = ClassInfo(classList[i]),
let superclassInfo = classInfo.superclassInfo,
superclassInfo == superClassInfo
{
subclassList.append(classInfo)
}
}
return subclassList
}
模拟器中的代码崩溃在let clazz = classList[i]
这一行,报错为EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
。
这一行不是我的原始代码。它在这里只是为了表明下标越界导致崩溃,而不是ClassInfo(...)
。
你有什么建议吗?
(这段代码受列出一个类的所有子类的启示)
for
循环简化为一个简单的map
调用。 - Alexander