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
类型变量的Obj-C关键字Class
。我没有把它作为任何类类型的通用术语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;