如何使用类方法中的委托(或传递消息)

时间:2012-05-12 09:25:48

标签: objective-c delegates protocols class-method

我有一个由视图控制器调用的类方法。我希望视图控制器知道类方法何时完成其任务(它上面有线程) 我想我应该使用委托,但我需要一个id delegate,我不能通过self.delegate来调用它,因为类方法中没有自我。

我该怎么做?
谢谢!

1 个答案:

答案 0 :(得分:3)

您可以在类级别存储委托(甚至与对象级委托分开),但这对我来说听起来有点可疑。这是你如何做到的:

在您的标头文件中:

@interface SomeClass : SomeBaseClass
{
...
}

...
+ (id<SomeDelegateProtocol>)classDelegate
+ (void)setClassDelegate(id<SomeDelegateProtocol>) delegate
+ (void)myCleanupClassMethod

@end

在您的实施文件中:

@implementation SomeClass
...

static id<SomeDelegateProtocol> _classDelegate = nil;

+ (id<SomeDelegateProtocol>)classDelegate
{
    return _classDelegate;
}

+ (void)setClassDelegate(id<SomeDelegateProtocol> delegate
{
    _classDelegate = delegate;
}

+ (void)myCleanupClassMethod
{
    if ([_classDelegate respondsToSelector:@selector(theDelegateMethod:)])
    {
        [_classDelegate theDelegateMethod:something];
    }
}

@end

要实际使用此代码,只需将类级别委托设置为对象级委托并等待它被调用(您需要决定何时调用myCleanupClassMethod):

// Somewhere else in the project
[SomeClass setClassDelegate:self];