通过self调用类方法

时间:2010-06-17 10:03:49

标签: objective-c

我在类中有一些类方法,名称很长(确切地说是TimingConfigController),我经常在类中调用这些方法(例如:[TimingConfigController intervalStringAt:i]),但是长类名困扰我,因为这些陈述变得非常长,并且内省的所有内容都不太可读。

我正在读书,看看我是否能找到一个速记替代品,我在developer.apple.com上发现了这篇文章: Defining a Class

除其他外,它说

id newInstance = [[self alloc] init];

是制作与自己相同的类的对象的绝佳方法。据我所知,该语句使用自指针而不是类名称调用类方法,所以我在我的应用程序中尝试了,虽然它可能有用,但它会给出编译器警告。我真的不想发出警告。

所以,我的问题是,使用self来调用类方法可能和/或一个好主意?还有更好的选择吗?在.m文件的开头做一个#define Self TimingConfigController会不会很糟糕?或者我应该只服用药物并忍受烦恼?

2 个答案:

答案 0 :(得分:6)

self仅表示类方法中的类。因为类方法的目标是类,self表示类。

例如,在+ (void)initialize方法中,通常会看到:

+ (void)initialize {
    if (self == [MyClass class]) { // <- self is the current class
        // ...
    }
}

如果你真的想在没有重命名的情况下缩短类名,最简单的解决方案是使用#define语句:

#define TCC TimingConfigController

// The two lines are equivalent
id result1 = [TimingConfigController theClassMethod]; 
id result1 = [TCC theClassMethod];

答案 1 :(得分:3)

调用[[self alloc] init]仅适用于类方法,而不适用于实例方法。如果您有实例方法,并且想要创建同一个类的对象,则应使用:

id newInstance = [[[self class] alloc] init];