我为自定义类定义了一个协议,现在我想给它一个委托。该类不会被实例化,仅用于其类方法。但是,委托类已被实例化并分配给常量。如果我正在实例化该类,我会让它像这样引用它的代理:
@property (weak) MyDelegateClass <MyProtocol> *delegate;
但是因为我没有实例化这个类,所以我不能给它属性。那么我该如何引用它的代表呢?一个getter方法?像这样的东西?我还需要定义一个setter吗?
+ (<MyProtocol>MyDelegateClass *)delegate;
这里的语法是什么?
答案 0 :(得分:0)
@interface NeverInstanciatedClass
+ (MyDelegateClass *) delegate;
+ setDelegate: (MyDelegateClass* <MyProtocol>) delegate;
@end
@implementation
static MyDelegateClass <MyProtocol> *_delegate;
+ (MyDelegateClass *) delegate {
return _delegate;
}
+ setDelegate: (MyDelegateClass* <MyProtocol>) delegate {
_delegate = delegate;
}
@end
(从头开始 - 从未编译过,也没有检查语法)
如果您不使用ARC,则可能需要添加一些内存管理。但是当你使用(weak)
时我假设你使用ARC。
如果您完全使用协议,则无需完全限定MyDelegateClass* <MyProtocol>
。 id <MyProtoco>
应该这样做。我只是这样做,因为你在你的片段中做到了。
当您访问协议中声明的方法(然后您应该只访问方法)时,甚至不需要知道它是什么类型的对象。你(和编译器)需要知道的是它实现了协议。