閉包相似於 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")
})
}
}