3

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

我该怎么做?
谢谢!

4

1 回答 1

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];
于 2012-05-12T09:36:25.030 回答