考虑到我不能使用属性,如何为类(而不是实例)指定委托?

时间:2013-03-30 00:01:08

标签: ios objective-c delegates protocols encapsulation

我为自定义类定义了一个协议,现在我想给它一个委托。该类不会被实例化,仅用于其类方法。但是,委托类已被实例化并分配给常量。如果我正在实例化该类,我会让它像这样引用它的代理:

@property (weak) MyDelegateClass <MyProtocol> *delegate;

但是因为我没有实例化这个类,所以我不能给它属性。那么我该如何引用它的代表呢?一个getter方法?像这样的东西?我还需要定义一个setter吗?

+ (<MyProtocol>MyDelegateClass *)delegate;

这里的语法是什么?

1 个答案:

答案 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>应该这样做。我只是这样做,因为你在你的片段中做到了。 当您访问协议中声明的方法(然后您应该只访问方法)时,甚至不需要知道它是什么类型的对象。你(和编译器)需要知道的是它实现了协议。