有人知道为什么我用下面的代码获取和设置我的iVars时会得到BAD_ACCESS吗?
class myClass: NSObject {
var model = "Unspecified"
override init() {
super.init()
var key: NSString = "model"
var aClass : AnyClass? = self
var ivar: Ivar = class_getInstanceVariable(aClass, key.UTF8String)
// Set
object_setIvar(aClass, ivar, "R56")
// Get
var value: AnyObject = object_getIvar(aClass, ivar)
}
}
myClass()发布于 2014-11-17 14:13:47
因为Swift类不再有传统的iVars,所以你得到了一个糟糕的访问权限(尝试获取一个Swift类的iVar布局,自己去看看)。但是Swift类对于运行时来说也是Objective-C对象,并且除了Swift类之外似乎没有任何路径。
最终发生的是运行时递给您一个虚假的iVar,它真的认为它指向类定义中的适当偏移量(可能是0左右,因为它不存在)。当你尝试获取所说的iVar时,运行时字面上是derefs you some of the object's bytes and tries to wrap it back up in an Objective-C pointer。通常,这些数据无意中设置了标记位,因此经常映射到标记类(在我的测试中,我可靠地返回了运行时认为是NSMutableData的标记指针)。
长话短说:你不能再这样做了。
https://stackoverflow.com/questions/25718294
复制相似问题