比如类Test:
@interface Test : NSObject
@property(nonatomic,copy)NSString* str;
@end
Test* t = [[Test alloc]init];
t.str=@"1111";
id str1 = [t valueForKeyPath:@"str"];
id str2 = [t valueForKeyPath:@"strstr"];
执行到id str2 = [t valueForKeyPath:@"strstr"];会crash,用@try{}@cache{}也无法扑获异常,还是会crash.
这时可以用下面的方法:
unsigned int properties_count;
objc_property_t*properties =class_copyPropertyList([Test class], &properties_count);
for(inti =0; i < properties_count; i++)
{
objc_property_tproperty = properties[i];
NSLog(@"name:%s",property_getName(property));
}
获取属性列表。
确定valueForKeyPath的参数在属性列表里再调用此方法。
网友评论