2012-02-07 129 views
0

我的目的如下:我想创建一个延迟调用方法。我可能需要为此创建一个块,但我不确定。你能解释我如何为此创建一个块吗?在Objective-C中使用延迟执行方法

这是代码:

- (IBAction)buyItem:(id)sender { 
    BOOL purchase = ... /*call purchase method use block*/ 
} 

在这种方法我进行购买和购买后已成功完成我想引起我的变量purchase

为了更清楚:

步骤1:调用buyItem方法。

步骤2:等待购买的响应(我省略用于购买的实际方法)

步骤3:返回StoreKit对象后一个关于购买响应,写入变量的值purchase

第4步:将值写入purchase之后,我的方法buyItem完成执行(转至}并释放)。

我的问题不是专门针对StoreKit(意思是StoreKit响应方法 - 这仅仅是一个示例)。 purchase变量也是一个例子。对于这个变量,我将使用数据模型,并且在延迟方法执行后它会改变。

谢谢大家!

回答

1

你确实需要一个块,但可能与你想的不同。你不需要'关闭',你需要一个功能,将阻止,直到它收到来自商店包/服务器的响应。

你可以写一个普通的buyItem方法,但是在你内部做一个同步调用来存储工具包,或者如果这是不可能的,你可以使用线程技术来实现你想要的。例如,您可以等待条件变量,然后在商店套件调用返回时发出信号。

对于这两种情况,您都希望在UI线程以外的线程上执行'buyItem'调用,否则您的UI将冻结。考虑到这个约束(如果你甚至在处理UI),我会说整个方法都没有意义。相反,您需要启动商店套件调用,在用户界面中设置某个指标或微调器或其他内容,然后在商店套件调用返回时,取消调整微调器或其他任何设置。合理?

+0

你好科林!是的,这是个好主意!谢谢你一个很好的完整答案! – 2012-02-07 15:50:01