繁体   English   中英

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

[英]How do I designate a delegate for a class (not an instance) considering I can't use properties?

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

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

但是因为我没有实例化该类,所以无法赋予它属性。 那么,我该如何称呼它的代表呢? 吸气方法? 像这样吗 我还需要定义一个二传手吗?

+ (<MyProtocol>MyDelegateClass *)delegate;

这里的语法是什么?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM