Objective c 我可以在延迟后执行类方法吗?

Objective c 我可以在延迟后执行类方法吗?,objective-c,Objective C,我在一个类方法中,我想在延迟后从同一个类触发另一个类方法。看来我用不了 [MyClass performSelector:@selector(myMethod) withObject:nil afterDelay:1] 还有其他选择吗 编辑: 我的错。我假设该调用在类方法中不可用,因为它在我编写时不是自动完成的。正如一些人在这里指出的,它实际上工作得很好。我不知道为什么在我的例子中它没有自动完成,但我学到了一个关于在发生这种情况时做出假设的教训。谢谢大家。您使用-class获取对该类的实际引用

我在一个类方法中,我想在延迟后从同一个类触发另一个类方法。看来我用不了

[MyClass performSelector:@selector(myMethod) withObject:nil afterDelay:1]
还有其他选择吗

编辑:


我的错。我假设该调用在类方法中不可用,因为它在我编写时不是自动完成的。正如一些人在这里指出的,它实际上工作得很好。我不知道为什么在我的例子中它没有自动完成,但我学到了一个关于在发生这种情况时做出假设的教训。谢谢大家。

您使用
-class
获取对该类的实际引用,然后像这样发送消息:

[[MyClass class] performSelector:@selector(myClassMethod) withObject:nil afterDelay:1.0];

您也可以在之后使用dispatch_

double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    [MyClass myClassMethod];
});

你说的拖延是什么意思?为什么你不能在第一个方法之后调用第二个方法呢?我的意思是,在调用方法之前有n秒的延迟。如果不满足某个条件,我想在n秒后再次尝试方法调用。实例方法中没有问题,但performSelector:afterDelay:似乎在类方法中不可用。在Objective-C中,所有类对象都是基类的实例。因此,如果MyClass继承自NSObject,那么NSObject的所有实例方法也是MyClass的类方法。如果你对为什么感到好奇的话,你可以在上阅读更多……书面电话很好。你试过了吗?谢谢。出于兴趣,为什么我需要使用[[MyClass class]来调用[PerformSelect:afterDelay:],但要立即调用一个方法,我可以只编写[MyClass myMethod]?在Objective-C中,类实际上是为其实例提供某种模板的对象。如果您编写
[MyClass myClassMethod]
基本上与编写
[[MyClass class]myClassMethod]
相同,但编译器会处理它,因此您不必这样做。当您使用
-performSelector:
动态地向类发送消息时,编译器无法为您处理该问题,您必须手动获取对该类的引用。@JamesWhite您没有。
[MyClass performSelector…]
应该可以正常工作。如果您想将该类作为参数传递,则需要使用
[MyClass class]
。[MyClass class]是不必要的。最初的工作方式与编写的一样。但因为
-performSelector:
被定义为实例方法,
[MyClass]
对我来说似乎更合适。