为什么在Objective-C的静态上下文中允许使用self
?
我认为这是允许的,然后我遇到内存错误,花了我一个星期才发现self
不是从类调用其他静态方法而不是键入类名的别名。
Xcode及其编译器似乎非常聪明地找到常见的陷阱,为什么它甚至不会产生这样的警告呢?
答案 0 :(得分:83)
+
为前缀的方法)真正只是特定Class
对象上的实例方法。 (你的思想是否只是爆炸?)由于你在实例方法中可以访问self
变量,你自然也可以在类方法中访问self
变量。self
指向类本身。[self performAction]
来调用此特定实例上的方法一样,您可以在类方法中执行[self performClassAction]
来调用此特定类的方法。Class
个对象都是NSObject
的子类。因此,您可以在任何NSObject
对象上使用任何Class
实例方法。 (你的思想是否只是再次爆炸?)答案 1 :(得分:8)
self
仅允许在Objective-C方法的上下文中使用。通过“静态上下文”,我假设你的意思是在一个类方法中(即,其签名以+
而不是-
开头。)你的断言“self
不是别名调用其他静态方法“是不正确的。
self
,以便您可以:
[Foo bar]
将始终使用Foo
的实现; [self bar]
将使用任何实现可在self
。)答案 2 :(得分:5)
这是允许的,因为self
在类方法中使用时引用了类对象。这就是“静态背景”的意思吗?如果是这样,你有什么记忆错误,否则建议?