我有一个由视图控制器调用的类方法。我希望视图控制器知道类方法何时完成其任务(它上面有线程)。
我想我应该使用委托,但我需要一个id delegate
,而且我不能通过 来调用它self.delegate
,因为类方法中没有 self 。
我该怎么做?
谢谢!
我有一个由视图控制器调用的类方法。我希望视图控制器知道类方法何时完成其任务(它上面有线程)。
我想我应该使用委托,但我需要一个id delegate
,而且我不能通过 来调用它self.delegate
,因为类方法中没有 self 。
我该怎么做?
谢谢!
您可以在类级别存储委托(甚至与对象级别委托分开),但这对我来说听起来有点可疑。以下是你的做法:
在你的头文件中:
@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];