0

第一的,

 + (void)allOpenRequestsWithBlock:(void (^)(NSArray *requests, NSError *error))block 

有人可以深入解释这种方法的语义是什么吗?什么是加号与减号。
有人可以解释 (void (^)(NSArray *requests, NSError *error)) 块吗?这是一个保留请求和错误的空块?

这行代码:

 [[AFChangeRequestAPIClient sharedClient] getPath:@"example.json" parameters:[NSDictionary      dictionaryWithObject:@"false" forKey:@"include_entities"] success:^(AFHTTPRequestOperation *operation, id JSON) 

这是调用具有上述参数的get Path方法吗?字典仅通过 1 个键/值 include_entities/false 传递?成功块部分是什么意思?是返回值吗?

我基本上是在尝试理解 AFNetworking 框架,它似乎使用了我不熟悉的语法。

谢谢!艾伦

4

2 回答 2

3

这是一个非常广泛的问题。您不应期望仅通过示例来学习一门语言,而应先阅读Apple 文档中的Objective-C 语言简介,然后再继续学习。通过提出问题,您似乎试图同时理解所有内容,而您似乎并不了解语言本身的基础知识,这不是学习语言的好方法。

无论如何要回答您的问题:

  • +符号表示它是一个类方法。该-符号表示它是一个实例方法。
  • 方法的语义- (returntype)methodName:(type1)param1 nameContinuation:(type2)param2 ;-这里表示它是一个实例方法,返回类型是returntype,该方法具有名称methodName:nameContinuation:并具有两个参数,一个type1由变量标识param1的类型和一个由变量type2标识的类型param2
  • + (void)allOpenRequestsWithBlock:(void (^)(NSArray *requests, NSError *error))block 那么,在合成器中,void(^)(NSArray* requests, NSError* error)是第一个参数的类型。这种类型描述了一个Objective-C 块,它与函数指针非常相似,但它允许闭包(和变量捕获)。有关块的更多信息,请再次阅读专门的 Apple 文档

对于第二个问题,方法调用不完整,错过了块体。

[[AFChangeRequestAPIClient sharedClient] getPath:@"example.json"
                                      parameters:[NSDictionary dictionaryWithObject:@"false" forKey:@"include_entities"]
                                         success:^(AFHTTPRequestOperation *operation, id JSON)
 {
   /* block body here */
 }];

这会调用getPath:parameters:success:返回的对象上的方法[AFChangeRequestAPIClient sharedClient](因此这与上面的方法完全不同)。这个方法传递了三个参数,第一个是@"example.json",第二个是NSDictionary只包含一个键/值对,最后一个是 Objetive-C 块。该块分别采用两个参数类型AFHTTPRequestOperationid

同样,在理解基础知识(例如实例与类方法、方法的基本语言语法等)之前,您似乎真的试图学得太快并使用高级的东西(例如块及其语法)。花点时间学习东西,你不是一天就能盖房子的,更重要的是你在屋顶之前打好地基;)

于 2012-09-21T13:09:30.000 回答
1

加号表示类级别的方法,减号表示实例方法。

块类似于函数。该块有两个参数(anNSArray*和 an NSError*)和 'returns' void

对于第二个问题,我不能完全回答你。

我不知道那个框架,你发布了一行代码,但是那行缺少一些东西(至少块体不存在)。

于 2012-09-21T13:10:41.213 回答