- GCD(Grand Central Dispatch)中的应用:
- 说明:在GCD中,使用
dispatch_async
、dispatch_sync
等函数时,Block用于定义在队列中执行的任务。
- 示例代码:
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
// 这里是在后台队列执行的代码
NSLog(@"This is a background task.");
});
- 作为方法参数:
- 说明:许多系统框架的方法接受Block作为参数,用于在特定事件发生时执行自定义代码。比如
UIView
的动画方法animateWithDuration:animations:completion:
。
- 示例代码:
[UIView animateWithDuration:0.3 animations:^{
// 动画相关的视图改变代码
self.view.alpha = 0.5;
} completion:^(BOOL finished) {
if (finished) {
NSLog(@"Animation completed.");
}
}];
- 集合遍历:
- 说明:
NSArray
、NSDictionary
等集合类有一些方法可以接受Block作为参数来对集合中的元素进行操作。例如NSArray
的enumerateObjectsUsingBlock:
方法。
- 示例代码:
NSArray *array = @[@"one", @"two", @"three"];
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"Object at index %lu is %@", (unsigned long)idx, obj);
if ([obj isEqualToString:@"two"]) {
*stop = YES; // 停止遍历
}
}];
- 网络请求回调:
- 说明:在进行网络请求时,使用Block来处理请求完成后的响应数据。以AFNetworking框架为例。
- 示例代码:
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:@"https://example.com/api" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"Request success: %@", responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"Request failed: %@", error);
}];