1

恐怕这是一个愚蠢的问题,但老实说,我不明白。

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

RemoteConfiguration* configs = [[RemoteConfiguration alloc] init];
[configs updateSettings];
[configs release];

这很烦人,因为不需要创建一个对象只是为了使用一种方法,该方法可能是一个类方法并调用如下:

[RemoteConfiguration updateSettings];

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

4

3 回答 3

5

在类方法中,关键字self不是指该类类型的实例,而是指实际的class实例,如[RemoteConfiguration class].

像这样的类实例没有实例变量(至少不是您要声明的变量,而是Class实例变量,尤其是isa实例变量)。

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

于 2013-07-08T15:55:17.003 回答
1

在没有看到代码的情况下,听起来您正在self从您希望成为类方法的方法中引用。

您无法引用self,因为您正在对类执行操作,而不是类的实例。因此self并不指望什么。

如果您真正寻求将其作为类方法,则必须修改该方法。请记住,您只能使用局部变量和static变量。如果您有任何属性或实例变量,您也无权访问它们。

于 2013-07-08T15:56:59.517 回答
-4

“self”指向实例。类方法没有任何关联的实例。

基本上,如果您调用一个类方法,“仍然有其成员变量”的“对象”不会被该方法“看到”,因为它是整个类上的方法,而不是特定的单个对象上的方法。

您可能可以将一个传递给它——但是,为什么首先要使用类方法呢?(简而言之:不要。)

理论上,也有可能使用类变量而不是实例变量……这一切都取决于。

于 2013-07-08T15:54:10.880 回答