NSStringFormClass 这个不用说,看命名都应该知道吧。
NSClassFromString 将NSString转换成一个Class,如果不存在,返回一个nil。
正常来说,
id myObj = [[NSClassFromString(@"MySpecialClass") alloc] init];
和
id myObj = [[MySpecialClass alloc] init];
是一样的。但是,如果你的程序中并不存在MySpecialClass这个类,下面的写法会出错,而上面的写法只是返回一个空对象而已。
因此,在某些情况下,可以使用NSClassFromString来进行你不确定的类的初始化。
比如在iPhone中,NSTask可能就会出现这种情况,所以在你需要使用NSTask时,最好使用:
[[NSClassFromString(@"NSTask") .....]]
而不要直接使用[NSTask ...]这种写法。
NSClassFromString的好处是:
1 弱化连接,因此并不会把没有的Framework也link到程序中。
2 不需要使用import,因为类是动态加载的,只要存在就可以加载。因此如果你的toolchain中没有某个类的头文件定义,而你确信这个类是可以用的,那么也可以用这种方法。
同样的,还可以通过一个方法名字来得到一个Selector,然后就可以动态的调用这个Selector了,在Obj-c里面,一切都是动态的。
类似的函数如下:
NSClassFromString
NSGetSizeAndAlignment
NSLog
NSLogv
NSSelectorFromString
NSStringFromClass
NSStringFromSelector
分享到:
相关推荐
创一个Symbolic Breakpoint断点, 命名为UIApplicationMain, 增加一个Action为Debugger Command, 值为expr (Class)NSClassFromString(@"IBARevealLoader") == nil ? (void *)dlopen("/Applications/Reveal.app/...
NSString * path = [... Class controllerNameClass = NSClassFromString(controllerNameStr); //创建类对应的视图控制器对象 UIViewController * viewController = [[controllerNameClass alloc] init];
有时候我们需要通过类名来生成相应类的实例,这就用到反射机制。 首先通过类名生成Class类实例 在通过该Class 实例来创建(alloc)对象; 具体方法会用到 NSClassFromString(类名)
id element = [[NSClassFromString(@"NSXMLElement") alloc] initWithXMLString: [rsp XMLString] error: &err]; if (![[[element attributeForName: @"stat"] stringValue] isEqualToString: @"ok"]) { NSLog(@...
[test registerClass:[NSClassFromString(@"JayCollectionViewCell") class] forCellWithModel:[NSCollectionBaseModel class]]; //添加数据源 可以继承NSCollectionListModel、NSCollectionBaseModel 绑定...
为您的 Xcode 插件添加首选项...如果您想检查是否有人安装了插件,请查看NSClassFromString(@"ORPreferencesEnhancer")返回某些内容。安装 git clone https://github.com/orta/Preferences.gitcd Preferencesxcodebuil
源码D3Json,通过swift的反射特性,把json数据转换为model对象,本类最主要是解决了其他一般json转换类不能转换自定义对象的问题 只有一个文件:D3Json.swfit 扩展写在add...尝试使用NSClassFromString写扩展,更方便
实例如下: // 获取网络环境的方法 + (NSString *)networktype{ NSArray *subviews = [[[[UIApplication sharedApplication] valueForKey:@statusBar] ... if([subview isKindOfClass:[NSClassFromString(@UISt
NSObject-FromClassName 快速扩展,可从其类名快速获取... " + className let aClass = NSClassFromString (className) as! UIViewController. Type return aClass. init () } }我从字符串数组中得到一个viewCont