闭包类似于 OC 中的
Block
预先定义好的代码
在需要时执行
可以当作参数传递
可以有返回值
包含
self
时需要注意循环引用
Block
#import "DemoViewController.h"
@implementation DemoViewController
-(void)viewDidLoad{
[super viewDidLoad];
[self loadData:^(NSString *str) {
NSLog(@"回调代码 %@", str);
}];
}
-(void)loadData:(void (^)(NSString *str))finished {
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSLog(@"耗时操作");
NSLog(@"%@",[NSThread currentThread]);
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"准备主线程回调");
NSLog(@"%@",[NSThread currentThread]);
//执行回调
finished(@"AAAA");
});
});
}
@end
//********************************************************************************************
闭包
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
loadData { (str) -> () in
print("完成回调代码 \(str)")
}
}
//自定义闭包参数
func loadData(finished: (str: String) -> ()) {
dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void in
print("耗时操作 \(NSThread.currentThread())")
// 通常加载数据...
// 异步完成之后,通过 block 回调
dispatch_async(dispatch_get_main_queue(), { () -> Void in
print("完成 \(NSThread.currentThread())")
// 执行 finished 回调
finished(str: "AAAA")
})
}
}