如何解决为什么在目标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”时确实引用了类对象。那是“静态上下文”的意思吗?如果是这样,那么您暗示了哪些内存错误?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。