为什么自我允许在目标c的静态上下文中

为什么在Objective-C的静态上下文中使用self

我认为这是允许的,然后我遇到了内存错误,花了一个星期才发现, self不是调用类的其他静态方法而不是input类名的别名。

Xcode和它的编译器在寻找常见的陷阱方面似乎非常聪明,为什么它甚至不会产生这样的警告?

  1. Objective-C中没有这样的“静态上下文”。 我们有什么是“阶级方法”。 他们绝对不是 “静态”的方法。
  2. 类方法(带有+的前缀) 实际上只是特定Class对象上的实例方法。 (你的头脑是否爆炸?)因为你有一个实例方法中可以访问的selfvariables,所以你自然也有一个selfvariables可以在类方法中访问。
  3. 在类方法中, self指向类本身
  4. 就像你可以在一个实例方法中执行[self performAction]来调用这个特定实例上的方法一样,你可以在一个类方法中执行[self performClassAction]来调用这个特定类的方法。
  5. 所有的Class对象都是NSObject子类。 所以你可以在任何Class对象上使用任何NSObject实例方法。 (你的头脑是否再次爆炸?)

self只能在Objective-C方法的上下文中使用。 通过“静态上下文”,我假设你的意思是在一个类方法(即,其签名以+而不是-开始的方法)。你断言“ self不是调用其他静态方法的别名”是不正确的。

在这些情况下,允许self ,以便您可以:

  1. 将类作为对象传递,因为所有的Objective-C类本身都是对象
  2. 发送消息到一个类,而不指定类名,以防子方法被覆盖( [Foo bar]将始终使用Foo的实现; [self bar]将使用self可用的任何实现。

这是允许的,因为self在类方法中使用时引用类对象。 这就是你所说的“静态环境”吗? 如果是这样,你有什么内存错误,否则build议?