如何获取没有实例的Class对象?

时间:2012-06-05 13:26:18

标签: objective-c ios oop nsobject foundation

有没有办法得到结果:

    NSObject *a = [[NSObject alloc] init];
    [a class];

没有实例化? 我希望传递 Class 对象作为参数,然后检查它。像这样:

    - (void) pushControllerOfClass: (Class) aClass
    {
        if([aClass isSubclassOfClass: *what should I write here?*]) {
        ...
        }
    }

直观地说,我试图写

        if([aClass isSubclassOfClass: UIViewController]) {

但它不起作用。 感谢未来的回应。

更新 这样的功能在ObjectiveC中被认为是不好的吗? 我从Nahavandipoor的书 iOS 5 Programming Cookbook 中重构了代码。 就像那样:

- (void) pushSecondController{
    SecondViewController *secondController = [[SecondViewController alloc]
                                             initWithNibName:nil 
                                             bundle:NULL];
    [self.navigationController pushViewController:secondController animated:YES];
}

至于我,这是一种不好的功能: 它应该是参数化的。

4 个答案:

答案 0 :(得分:8)

尝试:

 if([aClass isSubclassOfClass:[UIViewController class]])

答案 1 :(得分:3)

在回答您的问题时,您不需要对象的实例来获取其类。您可以直接从类中获取它:

[NSString class];
[YourClass class];

但是,如果您想要的是一个可以推送任何视图控制器的方法,那么您可以使用UIViewController作为参数类型:

- (void)pushAnyViewController:(UIViewController *)viewController
{
    [self.navigationController pushViewController:viewController animated:YES];
}

这将采用任何视图控制器,它是UIViewController的子类并将其推送到导航堆栈。

如果你真的想要这个方法来处理分配,你可以这样做:

- (void)pushViewControllerClass:(Class)viewControllerClass
{
    if ([viewControllerClass isSubclassOfClass:[UIViewController class]])
    {
        id viewController = [[viewControllerClass alloc] initWithNibName:nil bundle:nil];
        [self.navigationController pushViewController:viewController animated:YES];
    }
}

并称之为:

Class viewControllerClass = [MyViewController class];
[self pushViewControllerClass:viewControllerClass];

如果您正在使用nib,请确保该nib的名称与该类名称相同。

答案 2 :(得分:2)

您可以编写[UIViewController class]来获取类对象。

答案 3 :(得分:0)

大多数类都应该有一个类方法来获取类。

如果你发现自己经常这样做,或许重新审视你的设计?