刚刚发现,OC 中也有类似 Java 中的反射机制:
如下代码:
UIView *view =[[APLabel alloc] initWithNode:node];
可以改写为:
Class class= NSClassFromString(@"APLabel");
UIView *view =[[class alloc] initWithNode:node];
那么我们现有代码 UIFactory.m 中的 createViewFromNode: 函数只要稍加改造,就可以使代码更简洁,更易扩展。
1. 新建一个 plist 文件:ClassRegistry.plist

2. 对 createViewFromNode: 函数重写
- (UIView*)createViewFromNode:(NSDictionary *)node {
staticNSDictionary *dict = nil;
if(dict == nil) {
NSString*path = [[NSBundle mainBundle] pathForResource:@"ClassRegistry"ofType:@"plist"];
dict= [[NSDictionary alloc] initWithContentsOfFile:path];
}
NSString*tagName = [[node objectForKey:@"type"] lowercaseString];
NSString*className = [dict objectForKey:tagName];
Classclass = NSClassFromString(className);
return[[[class alloc] initWithNode:node] autorelease];
}
博客探讨了Objective-C中类似Java的反射机制,通过示例展示了如何使用`NSClassFromString`动态创建对象,以此简化代码并提高扩展性。文章还提到了如何创建一个ClassRegistry.plist文件,并重写`createViewFromNode:`函数,使其根据节点类型动态实例化视图类。
1274

被折叠的 条评论
为什么被折叠?



