日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Swift

發布時間:2023/12/13 综合教程 23 生活家
生活随笔 收集整理的這篇文章主要介紹了 Swift 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1,通知(NSNotification)介紹
這里所說的通知不是指發給用戶看的通知消息,而是系統內部進行消息傳遞的通知。要介紹通知之前,我們需要先了解什么是觀察者模式。


觀察者模式 (Observer):指一個對象在狀態變化的時候會通知另一個對象。參與者并不需要知道其他對象的具體是干什么的 。這是一種降低耦合度的設計。常見的使用方法是觀察者注冊監聽,然后在狀態改變的時候,所有觀察者們都會收到通知。
在 MVC 里,觀察者模式意味著需要允許 Model 對象和 View 對象進行交流,而不能有直接的關聯。



Cocoa 使用兩種方式實現了觀察者模式: 一個是 Key-Value Observing (KVO),另一個便是本文要講的Notification。

2,系統通知的注冊和響應
比如我們想要在用戶按下設備的home鍵,程序進入后臺時執行某些操作。一種辦法是在AppDelegate.swift里的applicationDidEnterBackground方法里執行。
除此之外,由于程序進入后臺會發送 UIApplicationDidEnterBackgroundNotification 的通知,我們可以事先注冊個監聽這個通知的“觀察者”來處理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

let notificationCenter = NSNotificationCenter.defaultCenter()

let operationQueue = NSOperationQueue.mainQueue()

let applicationDidEnterBackgroundObserver =
notificationCenter.addObserverForName(UIApplicationDidEnterBackgroundNotification,
object: nil, queue: operationQueue, usingBlock: {
(notification: NSNotification!) in
print("程序進入到后臺了")
})

//如果不需要的話,記得把相應的通知注冊給取消,避免內存浪費或奔潰
//notificationCenter.removeObserver(applicationDidEnterBackgroundObserver)
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}




3,使用自定義的通知
通知類型其實就是一個字符串,所以我們也可以使用自己定義的通知(同時也可以傳遞用戶自定義數據)。
下面創建了兩個觀察者獲取下載圖片通知,同時收到通知后的處理函數內部添加了個3秒的等待。




--- ViewController.swift ---

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

import UIKit

class ViewController: UIViewController {

let observers = [MyObserver(name: "觀察器1"),MyObserver(name: "觀察器2")]

override func viewDidLoad() {
super.viewDidLoad()

print("發送通知")
NSNotificationCenter.defaultCenter().postNotificationName("DownloadImageNotification",
object: self, userInfo: ["value1":"hangge.com", "value2" : 12345])
print("通知完畢")
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}




--- MyObserver.swift ---

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

import UIKit

class MyObserver: NSObject {

var name:String = ""

init(name:String){
super.init()

self.name = name
NSNotificationCenter.defaultCenter().addObserver(self, selector:"downloadImage:",
name: "DownloadImageNotification", object: nil)
}

func downloadImage(notification: NSNotification) {
let userInfo = notification.userInfo as! [String: AnyObject]
let value1 = userInfo["value1"] as! String
let value2 = userInfo["value2"] as! Int

print("(name) 獲取到通知,用戶數據是[(value1),(value2)]")

sleep(3)

print("(name) 執行完畢")
}

deinit {
//記得移除通知監聽
NSNotificationCenter.defaultCenter().removeObserver(self)
}

}




運行結果如下:
發送通知
觀察器1 獲取到通知,用戶數據是[hangge.com,12345]
觀察器1 執行完畢
觀察器2 獲取到通知,用戶數據是[hangge.com,12345]
觀察器2 執行完畢
通知完畢


(通過運行可以看出,通知發送后的執行時同步的,也就是觀察者全部處理完畢后,主線程才繼續往下進行。)

原文出自:www.hangge.com轉載請保留原文鏈接:http://www.hangge.com/blog/cache/detail_828.html

總結

以上是生活随笔為你收集整理的Swift的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。