获取类编译时的名称,如__PRETTY_FUNCTION__和__LINE__

时间:2014-01-16 10:36:28

标签: objective-c

就像

一样
@interface MyClass : NSObject
@end

@implementation MyClass

+ (void)helloWorld 
{
    printf("Hello world. The method being called is %s\n", __PRETTY_FUNCTION__);
}

@end

int main(int argc, char *argv[]) {
    @autoreleasepool {
        [MyClass helloWorld];   
    }
}

结果

Hello world. The method being called is +[MyClass helloWorld]

我想获得类名编译时间。

1 个答案:

答案 0 :(得分:4)

在编译时没有标准的方法来获取类名。添加这种非标准行为可能并不困难,但需要向编译器添加自定义代码。寻找定义 FUNCTION 的位置可能是一个很好的起点。

在寻找特定类型的解决方案时(例如在这种情况下),通常最好先提及您要解决的问题,而不是定义所需解决方案的术语。

很多人评论替代解决方案的原因在于,一般来说,程序员都在提供解决方案,而不是提供所要求的解决方案。我们经常发现所要求的要么是不可能的,不切实际的,要么不可能完全符合要求(如果我们所做的只是提供所要求的,我们将浪费更多的时间而不是我们已经做过的事情) 。当存在这些条件之一时,我们通常只是通过稍微改变参数来寻找解决方案。因此,在这种情况下,虽然许多人意识到编译时间确定不可用,但许多人也可能认为没有理由认为运行时间确定不能满足需要。当然有一些因素可以明显地对此提出异议,例如运行时性能(除非在慢速CPU上运行,然后使用ObjC就会产生问题)或内存开销(同样需要注意),因此不太可能成为一个因素。 / p>