`
wsqwsq000
  • 浏览: 675885 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

NSClassFromString和NSStringFromClass

 
阅读更多

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

 

 

分享到:
评论

相关推荐

    Reveal 163

    创一个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];

    ios反射机制

    有时候我们需要通过类名来生成相应类的实例,这就用到反射机制。 首先通过类名生成Class类实例 在通过该Class 实例来创建(alloc)对象; 具体方法会用到 NSClassFromString(类名)

    COCOA相关资料(XML解析).rar

    id element = [[NSClassFromString(@"NSXMLElement") alloc] initWithXMLString: [rsp XMLString] error: &err]; if (![[[element attributeForName: @"stat"] stringValue] isEqualToString: @"ok"]) { NSLog(@...

    ios-瀑布流tableview可以扔了.zip

    [test registerClass:[NSClassFromString(@"JayCollectionViewCell") class] forCellWithModel:[NSCollectionBaseModel class]]; //添加数据源 可以继承NSCollectionListModel、NSCollectionBaseModel 绑定...

    Preferences:为您的 Xcode 插件添加首选项支持

    为您的 Xcode 插件添加首选项...如果您想检查是否有人安装了插件,请查看NSClassFromString(@"ORPreferencesEnhancer")返回某些内容。安装 git clone https://github.com/orta/Preferences.gitcd Preferencesxcodebuil

    可自定义Json转model对象

    源码D3Json,通过swift的反射特性,把json数据转换为model对象,本类最主要是解决了其他一般json转换类不能转换自定义对象的问题 只有一个文件:D3Json.swfit 扩展写在add...尝试使用NSClassFromString写扩展,更方便

    iOS获取当前网络环境的实现方法(推荐)

    实例如下: // 获取网络环境的方法 + (NSString *)networktype{ NSArray *subviews = [[[[UIApplication sharedApplication] valueForKey:@statusBar] ... if([subview isKindOfClass:[NSClassFromString(@UISt

    NSObject-FromClassName:快速从其类名获取NSObject

    NSObject-FromClassName 快速扩展,可从其类名快速获取... " + className let aClass = NSClassFromString (className) as! UIViewController. Type return aClass. init () } }我从字符串数组中得到一个viewCont

Global site tag (gtag.js) - Google Analytics