通过类名实例化一个对象有三种方式:
OneObject *object = [[OneObject alloc] init];
OneObject *object = [OneObject new];
Class object = NSClassFromString(OneObject);
前面的2种方法对象实例化是我们常见的方法,第3种方法是runtime 的方法。其区别在于:
- 是否需要导入类的头文件(涉及到弱化连接问题);
- 通过前2种都需要 import 头文件,而第3种方法就不需要导入头文件,只需要知道类的名字就可以了。使用这种方法的好处是弱化连接,因此并不会把没有的Framework也link到程序中。
这种方式的一般使用如下:
NSString *myClassStr = @"myClass";
Class myClazz = NSClassFromString(myClassStr);
if (myClazz) {
id myClassInit = [[myClazz alloc] init];
}