3

根据苹果... https://developer.apple.com/library/content/samplecode/URLCache/Listings/Classes_URLCacheConnection_m.html

...我们应该这样做: if ([response isKindOfClass:[NSHTTPURLResponse self]])

和做的一样if ([response isKindOfClass:[NSHTTPURLResponse class]])吗?

4

2 回答 2

0

好的,Martin R的评论是对的,是一样的。对于任何课程,我可以做任何一个[ClassName self][ClassName class]获得相同的结果。我可以覆盖它们:

+ (Class)class
{
    return [super class];
}
+ (id)self
{
    return [super self];
}

事实上,所有 NSObject 实例方法 (-) 都成为 Class 的类方法 (+)。

关于操纵“自我”的专业人士:

  • 我们是直接操作一个类,所以不需要问一个类的类

关于操纵“自我”的骗局:

  • 它是低类型的'id'。
于 2013-01-11T18:50:17.067 回答
0

两者都-[NSObject self]+[NSObject class]同样的事情:返回调用它的对象。没有类实现+self类方法,因此当您调用self类对象时,它会调用该-[NSObject self]方法,因为元类最终继承自NSObject(这意味着类对象的所有实例方法NSObject都可用于类对象,除非被同名的类方法覆盖) .

我希望 Cocoa 库的编写者永远不会有+class,我们总是使用[ClassName self]而不是[ClassName class],因为现在人们总是混淆+[NSObject class](-[NSObject class]它做非常不同的事情——+[NSObject class]返回它被调用的 (class) 对象,而-[NSObject class]返回类它被调用的对象)。

于 2013-01-11T19:18:57.810 回答