本讲简介:多线程和Text Filed
本讲继续上一讲的demo。
多线程,但主要是和queue打交道。系统会协调thread去处理这些queue中的任务
线程/Queue的种类:
线程主要有三种,
Main Thread, 主线程,又称为UI线程。
Global Thread:
User created thread: Very rarely.
use this only if you have multiple, serially dependent activities
thread 和 queue 的关系
QOS
同步 vs 异步
GCD(Grand Central Dispatch)
Operation API vs DispatchQueue API
<pre> <code><ol>
<li> private func fetchImage() {
<li> if let url = imageURL {
<li> DispatchQueue.global(qos: .userInitiated).async { [weak self] in
<li> let urlContents = try? Data(contentsOf: url)
<li> if let imageData = urlContents, url == self?.imageURL {
<li> DispatchQueue.main.async {
<li> self?.image = UIImage(data: imageData)
<li> }
<li> }
<li> }
<li> }
<li> }</ol>
</code></pre>
第六讲留了一个课后作业,使用delegate的答案在这儿
这儿是在awakeFronNib()中设置的delegate。另外self的splitViewController成员是通过extension加入的,并不在原本的UIViewController的定义里。
<pre>
override func awakeFromNib() {
super.awakeFromNib()
self.splitViewController?.delegate = self
}
// MARK: - SplitViewController Delegate
func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController: UIViewController, onto primaryViewController: UIViewController) -> Bool {
if primaryViewController.contents == self {
if let ivc = secondaryViewController.contents as? ImageViewController, ivc.imageURL == nil {
return true
}
}
return false
}
</pre>
文本框 (Text Field)
文本框本身比较简单就是能显示,也能接受用户的输入。重点是如何处理键盘。另外最后还提了一句