gpt4 book ai didi

iOS:在方法中包装异步调用

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:07:16 24 4
gpt4 key购买 nike

我一直想知道下面的场景是否可能:

给定函数 foo 定义为

- (void)foo:(int)n action:(SEL)selector
{
// do something, maybe fetching data from server
...
// at a later point
[self performSelector:@selector(selector) withObject:returnObject];
}

注意:foo 是提供给您的黑盒函数。无论如何都不能改变


通常会创建函数 bar

- (id)bar:(id)x
{
return x;
}

并调用[self foo:n action:@selector(bar:)]在函数bar中得到结果;


相反,我想知道是否可以包装函数并使其同步,这样我只需要调用

- (id)foobar:(int)n;

获取通常由上面的 bar 返回的返回值

最佳答案

一种方法是使用空操作选择器调用 foo:action:,将传递给它的任何对象保存在实例变量中,然后调用 bar: 手动:

- (void)saveAsIvar:(id)var
{
_returnObject = var;
[_fooLock unlock];
}

- (id)bar:(id)x { return whatever; }

- (id)foobar:(int)n
{
[_fooLock lock];
[self foo:n action:@selector(saveAsIvar:)]
while (YES) {
if ([_fooLock tryLock]) {
return [self bar:_returnObject];
}
}
}

关于iOS:在方法中包装异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22080411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com