通过self调用类方法

use*_*178 4 objective-c

我在类中有一些类方法,名字很长(确切地说是TimingConfigController),我经常从类中调用这些方法(例如:[TimingConfigController intervalStringAt:i]),但长类名称困扰我,因为所有内联的语句都会变得非常长且不易阅读.

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

它说,除其他外,它

id newInstance = [[self alloc] init];
Run Code Online (Sandbox Code Playgroud)

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

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

Lau*_*ble 6

self只表示类方法中的类.因为类方法的目标是一个类,所以self表示该类.

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

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

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

#define TCC TimingConfigController

// The two lines are equivalent
id result1 = [TimingConfigController theClassMethod]; 
id result1 = [TCC theClassMethod];
Run Code Online (Sandbox Code Playgroud)