我一直在浏览Sketch,这是他们随Xcode发布的一个示例程序,我一直看到这样的事情(并非总是如此):
[[MyClass class] classMethod]
现在,由于MyClass
不是该类的实例,我只会这样做:
[MyClass classMethod]
作为一项实验,通过覆盖+ (Class)class
并返回另一个类,我能够在上述两个语句之间做出改变!如果您想要这样做,您需要使用以前的版本才能使用它,所以我可以看到可能是这个的用法,但是真的存在吗?
+class
听起来像是一个非常糟糕的想法篡改,但如果有的话请赐教。谢谢!
要查看一些示例,请查看-copy:
中找到的Sketch程序中SKTGraphicsView.m
中的方法Developer/Examples/Sketch/
。
答案 0 :(得分:5)
在你引用的情况下,我真的没有理由打电话给+class
。但是,肯定会调用[[self class] doSomething]
而不是[[MyClass class] doSomething]
。在第一种情况下,如果对象已经被子类化,[self class]
可以返回正确的结果。在第二种情况下,您将始终获得MyClass
类对象,这意味着MySubClass
无法有效地覆盖+doSomething
类方法。
答案 1 :(得分:0)
在这种情况下使用+class
是没有充分理由的。 +class
只返回调用它的对象(类对象),与-self
相同。在大多数情况下,人们使用[SomeClass class]
来获取类的类对象,因为类的名称不是表达式,并且只能作为特殊情况用作消息调用语法中的接收者。因此,在所有其他上下文中,他们使用[SomeClass class]
将类对象作为表达式(尽管[SomeClass self]
也可以同样有效)。
在您展示的情况下,它是多余的,因为它是消息的接收者。我猜他们是出于习惯或无知而做的(他们认为你必须总是写[SomeClass class]
来使用这个类。)