Objective c 为什么是类的种类:[nshtpurlresponse self]而不是类的种类:[nshtpurlresponse class]?
根据苹果公司的说法。。。 ……我们应该:Objective c 为什么是类的种类:[nshtpurlresponse self]而不是类的种类:[nshtpurlresponse class]?,objective-c,class,self,Objective C,Class,Self,根据苹果公司的说法。。。 ……我们应该: if([response iskindof class:[NSHTTPURLResponse self]]) 如果([response iskindof class:[nshtpurlresponse class]]),这与执行相同吗?好的,Martin R的评论是正确的,这是相同的。 对于任何类,我都可以对相同的结果执行[ClassName self]或[ClassName class]。 我可以覆盖它们: + (Class)class {
if([response iskindof class:[NSHTTPURLResponse self]])
如果([response iskindof class:[nshtpurlresponse class]]),这与执行
相同吗?好的,Martin R的评论是正确的,这是相同的。
对于任何类,我都可以对相同的结果执行[ClassName self]
或[ClassName class]
。
我可以覆盖它们:
+ (Class)class
{
return [super class];
}
+ (id)self
{
return [super self];
}
事实上,所有NSObject实例方法(-)都成为类的类方法(+)
关于操纵“自我”的专业人士:
- 我们直接操作一个类,所以不需要要求类的类
关于操纵“自我”的骗局:
- 它的类型为“id”
两个-[NSObject self]
和+[NSObject class]
都做同样的事情:返回调用它的对象。没有类实现+self
类方法,因此当您在类对象上调用self
时,它调用-[NSObject self]
方法,因为元类最终从NSObject
继承(这意味着类对象可以使用NSObject
的所有实例方法,除非被同名的类方法重写)
我希望Cocoa库的作者从来没有+类
,我们总是使用[ClassName self]
而不是[ClassName class]
,因为现在人们总是把+[NSObject class]
和-[NSObject class]
混为一谈(它们做的事情非常不同--+[NSObject class]
返回它被调用的(类)对象,而-[NSObject class]
返回它被调用的对象的类。没有区别:请参阅。如我在回答中所述,所有NSObject实例方法(-)都变为类方法(+)对于一个类来说,这意味着从技术上来说,不可能避免一个+Class
方法。出于同样的原因,我们有一个+hash、+superclass、+self、+zone、+isProxy、+retain、+release、+autorelease、+retainCount、+description、+init、+dealloc、+finalize、+copy、+mutableCopy、+allowsWeakReference、+classForCoder、+autoContentAccessingProxy、@Cœur:+
和-
表示方法在代码中的实现位置。在运行时,只有消息和对象;实例方法和类方法之间没有区别——它们都是对象的方法。所以我谈论的是-[NSObject self]
方法(当然,作为NSObject
实例的所有对象都可以使用它,包括从NSObject
派生的类的类对象)和+[NSObject class]
方法。