Objective c 定义为'Class<;的变量是什么;SomeProtocol>;我的班级是什么意思?

Objective c 定义为'Class<;的变量是什么;SomeProtocol>;我的班级是什么意思?,objective-c,class,variable-declaration,objective-c-protocol,Objective C,Class,Variable Declaration,Objective C Protocol,我习惯于看到像id myVar或MyObject myVar这样的事情,在这里,我们要说明的是,所讨论的变量可以愉快地调用NSCopying方法,而不必编译器抛出抖动 但我最近发现一些代码定义了这样一个变量: Class<NSCopying> myClass; Class-myClass; 我想知道这实际上意味着什么,因为它似乎与前两个例子有微妙的不同。我们似乎在说变量myClass可以愉快地接受来自NSCopying的方法调用,但是让类类型能够接受这些实例变量方法似乎没有多大意

我习惯于看到像
id myVar
MyObject myVar
这样的事情,在这里,我们要说明的是,所讨论的变量可以愉快地调用
NSCopying
方法,而不必编译器抛出抖动

但我最近发现一些代码定义了这样一个变量:

Class<NSCopying> myClass;
Class-myClass;
我想知道这实际上意味着什么,因为它似乎与前两个例子有微妙的不同。我们似乎在说变量
myClass
可以愉快地接受来自
NSCopying
的方法调用,但是让类类型能够接受这些实例变量方法似乎没有多大意义

我突然想到,类类型的变量在技术上是对象本身,这可能会让我或编译器(可能是我!)感到困惑

所以我想我是在问:

  • 什么是
    classmyclass实际意思
  • classmyclass是如何实现的不同于
    id myVar
  • 在哪里可以找到类似于
    classmyclass的东西被有意义地使用
  • 注:

    • 我只是以
      NSCopying
      为例,它不是我的用例的一部分
    • 无论我在哪里提到
      Class
      我都是指用于声明
      Class
      类型变量的Obj-C关键字
      Class
      。我没有把它作为任何类类型的通用术语
    使用
    Class
    意味着您只能提供
    Class
    ,而不能提供实例


    假设您希望您的应用程序是可配置的。假设您有许多类提供了许多不同的特性,但您不关心它们的继承性,只关心如何创建和配置它们。您可以使用类必须遵守的协议,并提供注册类的方法。然后,您可以使用定义的协议实例化这些类,而不需要了解该类的任何其他信息。

    我认为这可能意味着
    class myClass
    指向一个实现NSCopying协议的类。若协议有类方法声明,并且您想要调用它们,那个么它可能很有用

    例如:

        @protocol NSSecureCoding <NSCoding>
           @required
           // The Secure Coding Guide should be consulted when writing methods that decode data.
           + (BOOL)supportsSecureCoding;
        @end
    
    @protocol-NSSecureCoding
    @必需的
    //编写数据解码方法时,应参考《安全编码指南》。
    +(BOOL)支持编码;
    @结束
    
    是一种变量类型,它指向一个类对象,该类对象具有符合
    协议名
    的元类。换句话说:该类使用类方法实现
    ProtocolName
    中的方法

    示例:
    NSCopying
    包含一个必需的方法:

    @protocol NSCopying
    - (id)copyWithZone:(NSZone *)zone;
    @end
    
    Class
    表示有一个方法

    + (id)copyWithZone:(NSZone *)zone;
    

    在被指的班级里。这适用于所有
    NSObject
    派生类,并且对于将类对象用作字典键非常有用

    谢谢你的回复。我可能不太清楚我使用的术语
    ——请参阅我的编辑以获得澄清。谢谢“您只能提供一个类,不能提供一个实例”好吧,类对象是对象,即实例。@newacct,尝试使用易于理解的术语。尽管可以接受改进描述的建议。不,Objective-C对类对象没有类型安全性。您不能表示“NSString类型的类对象”或“符合协议X的类”。@newacct对,当然,感谢您澄清这一点!元类仅通过实现协议中的方法非正式地符合协议。
    @protocol NSCopying
    - (id)copyWithZone:(NSZone *)zone;
    @end
    
    + (id)copyWithZone:(NSZone *)zone;