ios怎么在运行时,通过一个NSString new一个类

iPhone开发的类都是通过

[[ClassName alloc] init];

来new一个类,都是编译阶段就处理好的。
但是,我有一个需求,就是要根据用户的输入来new几个类。。。
要怎么通过获取到的NSString类型的ClassName来初始化这个类啊。。。
还有,这个实例初始化以后,怎么动态的调用他的方法呢?

阅读 13.9k
2 个回答

1.已知类名@"SomeClassName",初始化此类的一个实例:

Class someClass = NSClassFromString(@"SomeClassName");
id obj = [[someClass alloc] init];

比如想初始化个UILabel

id obj = [[NSClassFromString(@"UILabel") alloc] init];
NSLog(@"What is obj : %@", obj);

类似的还有:
2.已知对象someObject,初始化一个和someObject相同类型的:

Class someClass = [someObject class];
id obj = [[someClass alloc] init];

3.已有类SomeClass,初始化SomeClass的一个实例:

Class someClass = [SomeClass class];
id obj = [[someClass alloc] init];

其实和[[SomeClass alloc] init]一样,意义不大

最后:
Cocoa中所有的类都是Class的实例,类可以接受alloc消息。

好像有个NSClassFromString可以从NSString获得Class的,然后可以拿这个class来创建对象(alloc、init什么的)
动态调用方法可以用performSelector相关的函数,入参是SEL类型的。

穷苦学生很久没用mac,没法测试,望见谅~

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题