3

我相信我正在尝试做的事情至少在某些范例中被称为“延迟回调”。

基本上我需要一种在另一个方法返回后调用方法的方法。像这样的东西:

- (void)someMethod:data
{
    [someObject doSomethingAfterCurrentMethodReturns]
}

我希望能够做到这一点,因为如果我在方法中做我想做的事情,我必须使用的外部附件库会使应用程序崩溃。这在库的文档中有所说明。我当前的解决方法涉及额外的用户交互——抛出 UIAlertView 并将该方法放在按钮单击之后。

我见过一些似乎可以处理这个问题的库。在 Objective C 中是否有内置的方法来处理这个问题?

4

4 回答 4

1

我知道这很旧,但想提供一个比提供的解决方案更喜欢的选项,因为我不知道它是否可以保证工作并且我不想测试它。

您想要延迟等效是正确的。我也在找这个。其他实现建议使用自动发布的自定义类。

我最喜欢这个解决方案,因为它简单且内联:

- (void)foo {
// code to execute in foo
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
    // code to execute after foo() returns
});
于 2018-12-12T17:03:21.977 回答
1

您可以使用

__attribute__((cleanup(...)))
于 2020-08-17T07:14:01.580 回答
0

根据您可以使用的方法的参数数量performSelector:withObject:afterDelay:。或者您可以启动一个NSTimer并在它触发时调用该方法。

于 2013-08-16T13:21:18.673 回答
0

defer在 ObjC 中提出了一个类似于 Go 的声明defer。请参阅我的博客文章GitHub 存储库。它看起来像这样:

- (void)someMethod:(id)data
{
  defer(^(){
    [someObject doSomethingAfterCurrentMethodReturns];
  });
  ///...
}
于 2014-03-06T17:43:31.947 回答