Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 为什么是类的种类:[nshtpurlresponse self]而不是类的种类:[nshtpurlresponse class]?_Objective C_Class_Self - Fatal编程技术网

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]
方法。