我想测试iPhone SDK中的对象是否具有可写的@property。
一种可能的方法是检查 -valueForKey: 方法,但这看起来相当不优雅!
Example:
@try {
id *value = [instance valueForKey:@"myProperty"];
}
@catch (NSException * e) {
// Key did not exist
}
有更好的方法吗?
如果您正在创建正在检查的对象,您可以覆盖valueForUndefinedKey:
and setValue:forUndefinedKey
做一些比引发异常更有用的事情。
另一方面,如果您试图在运行时内省您不知道的对象,则必须使用运行时方法来执行此操作。您可以使用 Objective-C 运行时本身并调用class_copyPropertyList
or protocol_copyPropertyList
并处理这些问题,或者使用 Foundation 并致电respondsToSelector
在给定属性(例如属性)的 KVC getter/setter 的对象上foo
你会这样称呼[someObject respondsToSelector:NSSelectorFromString(@"foo")];
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)