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

问题描述

| 为什么在Objective-C的静态上下文中允许使用“ 0”? 我以为这是允许的,然后遇到了内存错误,我花了一周的时间才发现ѭ0不是从类中调用其他静态方法的别名,而不是键入类名。 Xcode及其编译器在发现常见陷阱方面似乎非常聪明,为什么它甚至不生成有关此类警告的信息?     

解决方法

         在Objective-C中没有“静态上下文”之类的东西。相反,我们拥有的是“类方法”。它们绝对不是“静态”方法。 类方法(以
+
为前缀的方法)实际上只是特定
Class
对象上的实例方法。 (您的想法只是爆炸了吗?)由于您在实例方法中可以访问
self
变量,因此自然在类方法中也可以访问
self
变量。 在类方法中,“ 0”指向类本身。 就像您可以在实例方法中执行
[self performAction]
来调用该特定实例上的方法一样,您也可以在类方法中执行
[self performClassAction]
以调用该特定类上的方法。 所有
Class
对象都是
NSObject
的子类。因此,您可以在任何
Class
对象上使用任何
NSObject
实例方法。 (您的思想又爆发了吗?)     ,        仅在Objective-C方法的上下文中允许“ 0”。通过“静态上下文”,我假设您是指一种类方法(即,其签名以
+
而不是
-
开头的类)。您对于\“
self
不是用于调用其他静态方法\”的别名的说法是错误的。 在这些情况下,允许使用“ 0”,以便您可以: 将类作为对象传递,因为所有Objective-C类本身都是对象 如果在子类中重写了方法,则不指定类名就将消息发送到类(
[Foo bar]
将始终使用
Foo
的实现;
[self bar]
将使用
self
中可用的任何实现。)     ,        之所以允许,是因为在类方法中使用“ 0”时确实引用了类对象。那是“静态上下文”的意思吗?如果是这样,那么您暗示了哪些内存错误?     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...