首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么isKindOfClass:[NSHTTPURLResponse self]而不是isKindOfClass:[NSHTTPURLResponse类]?

为什么isKindOfClass:[NSHTTPURLResponse self]而不是isKindOfClass:[NSHTTPURLResponse类]?
EN

Stack Overflow用户
提问于 2013-01-11 17:44:05
回答 2查看 235关注 0票数 3

根据苹果公司的说法。https://developer.apple.com/library/content/samplecode/URLCache/Listings/Classes_URLCacheConnection_m.html

...we应该做的事情:if ([response isKindOfClass:[NSHTTPURLResponse self]])

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-12 02:50:17

好的,Martin R的评论是对的,它是一样的。对于任何类,我可以使用[ClassName self][ClassName class]来获得相同的结果。我可以覆盖这两个类:

代码语言:javascript
复制
+ (Class)class
{
    return [super class];
}
+ (id)self
{
    return [super self];
}

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

关于操纵“自我”的利弊:

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

的类

关于操纵“自我”的注意事项:

票数 0
EN

Stack Overflow用户

发布于 2013-01-12 03:18:58

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14275381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档