Objective c 如何在没有实例的情况下获取类对象?

Objective c 如何在没有实例的情况下获取类对象?,objective-c,ios,oop,nsobject,foundation,Objective C,Ios,Oop,Nsobject,Foundation,有没有办法得到以下结果: NSObject *a = [[NSObject alloc] init]; [a class]; 没有实例化? 我希望将类对象作为参数传递给函数,然后检查它。像这样: - (void) pushControllerOfClass: (Class) aClass { if([aClass isSubclassOfClass: *what should I write here?*]) { ...

有没有办法得到以下结果:

    NSObject *a = [[NSObject alloc] init];
    [a class];
没有实例化? 我希望将类对象作为参数传递给函数,然后检查它。像这样:

    - (void) pushControllerOfClass: (Class) aClass
    {
        if([aClass isSubclassOfClass: *what should I write here?*]) {
        ...
        }
    }
凭直觉,我试着去写

        if([aClass isSubclassOfClass: UIViewController]) {
但它不起作用。 Thx用于未来响应

更新: 在ObjectiveC中,这样的函数被认为是不好的吗? 我重构了Nahavandipoor的书iOS 5编程食谱中的代码。 就是这样,

- (void) pushSecondController{
    SecondViewController *secondController = [[SecondViewController alloc]
                                             initWithNibName:nil 
                                             bundle:NULL];
    [self.navigationController pushViewController:secondController animated:YES];
}
对我来说,这是一种糟糕的功能: 它在应该设置时没有参数化。

请尝试:

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

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

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


如果您发现自己经常这样做,也许可以重新审视您的设计?

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

[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的名称与类的名称相同。

在OP update中回答,因为注释中没有代码格式。您还可以编写
UIViewController.class
。您还可以编写
NSString.class
YourClass.class