...我们应该这样做:
if ([response isKindOfClass:[NSHTTPURLResponse self]])
和做的一样if ([response isKindOfClass:[NSHTTPURLResponse class]])
吗?
...我们应该这样做:
if ([response isKindOfClass:[NSHTTPURLResponse self]])
和做的一样if ([response isKindOfClass:[NSHTTPURLResponse class]])
吗?
好的,Martin R的评论是对的,是一样的。对于任何课程,我可以做任何一个[ClassName self]
或[ClassName class]
获得相同的结果。我可以覆盖它们:
+ (Class)class
{
return [super class];
}
+ (id)self
{
return [super self];
}
事实上,所有 NSObject 实例方法 (-) 都成为 Class 的类方法 (+)。
关于操纵“自我”的专业人士:
关于操纵“自我”的骗局:
两者都-[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]
返回类它被调用的对象)。