- async/await: 使用async/await语法可使异步编程更加简洁明了。定义一个async函数,函数内部可以使用await来等待异步操作完成后再返回结果。
示例代码:
async function fetchData() {
const response = await fetch('https://example.com/data');
const data = await response.json();
return data;
}
- Task: Task封装了异步操作的执行过程,可以为异步操作提供一定的控制。可以使用Task.Run方法来运行一个异步任务,使用Task.WaitAll方法来等待多个异步任务完成。
示例代码:
async Task FetchDataAsync() {
using (var httpClient = new HttpClient()) {
var response = await httpClient.GetAsync("https://example.com/data");
var data = await response.Content.ReadAsStringAsync();
return data;
}
}
- [weak self]: 当在block或closure中使用self,需要避免循环引用问题,可使用[weak self]或[unowned self]来解决。[weak self]表示对self使用弱引用,在block中使用时需要先将self转为强引用。
示例代码:
// Objective-C
__weak typeof(self) weakSelf = self;
[self doSomethingWithCompletion:^{
typeof(self) strongSelf = weakSelf;
if (strongSelf) {
[strongSelf updateUI];
}
}];
// Swift
weak var weakSelf = self
fetchData { [weak weakSelf = weakSelf] data in
guard let strongSelf = weakSelf else { return }
strongSelf.updateUI(with: data)
}