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
。