当我从实例改为类方法时,为什么不再允许'self'?

use*_*ser 1 objective-c class-method class-members ios

我担心这是一个愚蠢的问题,但我老实说不明白.

我有一个类,RemoteConfiguration目前它的功能是所有实例方法.既然如此,我必须使用它:

RemoteConfiguration* configs = [[RemoteConfiguration alloc] init];
[configs updateSettings];
[configs release];
Run Code Online (Sandbox Code Playgroud)

这很烦人,因为没有必要创建一个对象只是为了使用一个方法,它可以是一个类方法,并调用如下:

[RemoteConfiguration updateSettings];
Run Code Online (Sandbox Code Playgroud)

但是,当我将我的方法从Xcode 更改-+抱怨我访问的每个对象时self,建议我使用->.(这也会引起警告)我不明白这一点.无论方法如何,对象仍将具有其成员变量.那么为什么有->必要呢?如何在类方法中使用成员变量?

Ben*_*n S 5

在类方法中,关键字self不引用该类类型的实例,而是class引用实际实例,如结果中所示[RemoteConfiguration class].

像这样的类实例没有实例变量(至少不是你要声明的Class实例变量,而是实例变量,最值得注意的是isa实例变量).

如果您希望拥有单个静态实例,则RemoteConfiguration可以将实例变量声明为文件中的static变量.m,或者使用类似单例模式的东西来保存实例.