为什么是KindOfClass:[NSHTTPURLResponse self]而不是isKindOfClass:[NSHTTPURLResponse class]?

时间:2013-01-11 09:44:05

标签: objective-c class self

根据Apple的说法...... https://developer.apple.com/library/content/samplecode/URLCache/Listings/Classes_URLCacheConnection_m.html

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

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

2 个答案:

答案 0 :(得分:0)

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

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

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

关于操纵'自我'的专业:

  • 我们直接操作一个Class,所以不需要请求Class
  • 的类

关于操纵'自我'的决定:

  • 它是低类型的'id'。

答案 1 :(得分:0)

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

我希望Cocoa图书馆作者从未有+class,我们只会使用[ClassName self]代替[ClassName class],因为现在人们总是把+[NSObject class]-[NSObject class]混为一谈+[NSObject class](它做了很多不同的事情 - -[NSObject class]返回它被调用的(类)对象,而{{1}}返回它被调用的对象的类。)