OC中的反射
- OC的反射是基于其Runtime实现的,一般表现在字符串和Class转换,字符串和内部方法转换,字符串和属性的转换(取值和赋值)
-
字符串和Class转换
- 通过类名的字符串形式实例化对象
// 返回一个类对象 Class class = NSClassFromString(@"Person"); //类名的字符串 Person *p1 = [[class alloc] init];
- 将类名转换为字符串
Class class = [Person class]; NSString *classString = NSStringFromClass(class);
-
字符串和内部方法转换(SEL)
- 通过方法的字符串形式实例化方法
SEL sel = NSSelectorFromString(@"eat"); if ([p1 respondsToSelector:sel]) { [p1 performSelector:sel]; }
- 将方法变为字符串
NSString *methodString = NSStringFromSelector(@selector(eat));
-
字符串和属性的转换
- OC中属性的反射通过KVC(Key-Value Coding)机制实现,KVC是一种间接访问对象属性的机制,不直接调用getter 和 setter方法,而使用valueForKey 来替代getter 方法,setValue:forKey来代替setter方法。
-
网友评论