如何存储一个Class变量,然后在Objective-C中调用该类的静态方法

Nic*_*ell 4 xcode static-methods objective-c ios

所以我希望一个类能够存储一个"Class"对象,然后再调用该类的静态方法......

基本上我有多个继承单个类的类,所以它们都有相同的静态方法(但返回不同的东西).我希望能够存储我正在使用的子类,所以我知道哪一个要调用静态方法...

我知道我可以上课

Class something = [VirginMobile class];
Run Code Online (Sandbox Code Playgroud)

但我不能做那样的事情 int i = [something staticMethodReturningInt];

有什么方法可以做到这一点吗?

干杯

zou*_*oul 6

我知道你可能不想听到这个,但是一旦你开始对课程过于聪明,那么使用常规对象肯定会有所体现.我不确定我是否正确理解你的问题,但解决输入问题的一种方法是将接收器强制转换为id:

id something = [VirginMobile class];
int i = [something methodReturningInt];
Run Code Online (Sandbox Code Playgroud)

这样编译就可以了,只要编译器可以看到定义methodReturningInt.当然,在运行时VirginMobile必须回应+methodReturningInt.

  • 当你使用`id`类型("一个对象")来实现某些东西时,你就可以有效地使用动态类型.编译器很乐意将任何现有消息发送到对象,如果接收器没有响应它,那么在运行时只会出错.另一方面,`Class`类型更精确,并且没有`+ methodReturningInt`的方法,因此编译器对象.对不起,我无法解释这个问题,因为我自己并不完全清楚这个问题.Apple的[Objective-C编程语言](http://goo.gl/Xj4bu)书应该有所帮助. (5认同)