一,关于NSClassFormString:
NSClassFromString是一个很有用的东西,尤其在进行iPhone toolchain的开发上。
正常来说,
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中没有某个类的头文件定义,而你确信这个类是可以用的,那么也可以用这种方法。
例如:Classclass =NSClassFromString(className);//NSClassFromString在某些特殊的情况下,可以进行一些你不确定的类,的定义。
if(class) {
UIViewController*ctrl = class.new;
ctrl.title=_titles[indexPath.row];
[self.navigationControllerpushViewController:ctrlanimated:YES];
二、关于(lldb) po text
error: Couldn't materialize: couldn't get the value of variable text: variable not available
error: errored out in DoExecute, couldn't PrepareToExecuteJITExpression
解决方案
其实这是由于你工程编译策略的问题,需要将 release 下的变异策略修改:
Project > App target > Build Settings > Optimization Level > Release 将选项 fastest,Smallest[-Os]改为 None .
在 debug 下不会发生此错误,是因为 debug 下的变异策略默认为 None
三、关于编译错误:Apple Mach-O Linker Error,不知道大家有没有试过,编译的时候,特别是手动拖拽了第三方的东西的时候,一编译就出现这种情况
这种错误,很奇怪,就是你点击的话,对应的错误位置不会给你点出来。那么,这种情况就应该是Link Binary With Libraries里面没有添加相应的系统依赖库,所以,添加上去就解决这种问题啦。