Objective c 是否可以使用方法代替块?
在Objective-C中,是否可以使用方法代替块 例如,与定义块然后调用方法不同:Objective c 是否可以使用方法代替块?,objective-c,objective-c-blocks,Objective C,Objective C Blocks,在Objective-C中,是否可以使用方法代替块 例如,与定义块然后调用方法不同: [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *responseData
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *responseData, NSError *error) {
[self processTwitterSearchResponse:response data:responseData error:error];
}
];
直接调用该方法:
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:(processTwitterSearchResponse:response data:responseData error:error)
];
或者一些类似的。不。如果该方法将一个块作为其处理程序,则需要给它一个块。为什么? 有一些方法采用函数指针而不是块,比如NSArray的
-sortedArrayUsingFunction:context:
(与基于块的-sortedarrayusingcomarator:
)不同,但您肯定不能在需要块的地方交换方法签名。总之,不是
如果该方法需要一个块,则必须给出它
理解这一点的一种方法是:块从定义它们的位置(词法范围)捕获状态(变量值),允许将该状态传递给另一个线程以延迟执行。这就是为什么它们不能与函数指针互换;块中包含了更多的信息。这是一个明智的问题,只需在已经给出的答案上添加一点 如果您查看直接接受另一个方法作为参数的方法,您会注意到它还接受一个附加参数,即调用该方法的对象。看看你的块例子,你会看到它引用了
self
,所以你的块提供了相同的一对值——一个方法和一个对象
Objective-C完全没有理由不能有一个包含对象和方法的构造,比如说
@block(object,method)
,或者更简单地说就是object.method
,并返回一个块,但它没有。如果您熟悉C#,您会知道它确实有这样一个构造来生成委托,这是它的块版本。非常感谢您提供了带有示例的详细答案!创建调用该方法的块有多难?