闭包相似于 OC 中的 Block
闭包
预先定义好的代码异步
在须要时执行async
能够看成参数传递ide
能够有返回值spa
包含 self
时须要注意循环引用线程
Block3d
#import "DemoViewController.h"code
@implementation DemoViewControllerorm
-(void)viewDidLoad{get
[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")
})
}
}