2

我已经推断出了 Objective-C 中的很多事情,并且我已经阅读了几个简单地讨论数据类型的教程,但是我没有遇到任何简单地解释语法的东西。

首先,这意味着什么?它的作用是启动一个线程并获取从服务器返回的数据:

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

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

4

3 回答 3

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

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

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

苹果积木编程指南

于 2012-05-08T20:26:03.627 回答
2

让我们从第二个项目符号开始:类方法用 声明+,实例方法用 声明-

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

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

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

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

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

[someApiInstance apiCall:apiCallCallback];

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

于 2012-05-08T20:33:58.600 回答