这个方法名称有什么表明它是异步的吗?

时间:2012-05-08 20:20:05

标签: objective-c syntax

我已经推断出Objective-C中有很多东西做了什么,我已经完成了几个简单讨论数据类型的教程,但我没有遇到任何简单解释语法的东西。

对于初学者来说,这是什么意思?它的作用是启动一个线程并从服务器返回数据:

- (void)apiCall:(void (^)(NSMutableArray *list))block {

该函数头中的某些内容是否告诉我它是异步的?这是block的意思吗?

3 个答案:

答案 0 :(得分:4)

  1. 不,块并不意味着异步,Obj-C中的块只是一些可以作为参数传递给方法的代码。
  2. 以 - 开头的方法是实例方法,以+开头的方法是类方法。
  3. ^是表示块的句法标记。

答案 1 :(得分:2)

对于您的第一个问题:您必须查看API文档以确定它是否是异步的。

有关块的更多信息,请参见此处:

Apple Blocks Programming Guide

答案 2 :(得分:2)

让我们从你的第二个子弹开始: 类方法用+声明,实例方法用-声明。

第一个和第三个相关,名为block的参数是一个代码块,它是一段打算稍后运行的代码。鉴于此方法apiCall的名称,我建议这是在调用完成后运行的方法。

我们自然会怀疑这个方法会在另一个线程上做一些工作,然后调用你提供的块,但为此你需要检查文档或代码。

签名:(void (^)(NSMutableArray* list)) block描述了一个具有void返回类型且仅NSMutableArray* list为参数的代码块。

block参数的一个示例用法是:

void (^apiCallCallback)(NSMutableArray*) = ^(NSMutableArray* list) {
    NSLog(@"The API returned %d items in a list", [list length]);
}

[someApiInstance apiCall:apiCallCallback];

在API实例完成任何它想做的事情之后,你会看到打印了日志语句。