激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - IOS - 詳解iOS 用于解決循環引用的block timer

詳解iOS 用于解決循環引用的block timer

2021-05-18 21:25無夜之星辰 IOS

這篇文章主要介紹了詳解iOS 用于解決循環引用的block timer,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一、什么是回調函數?

回調函數,本質上也是個函數(擱置函數和方法的爭議,就當這二者是一回事)。由“聲明”、“實現”、“調用”三部分組成。

在上面的例子中,我可以看出,函數amount(其實是Block),的聲明和調用在A類中,而實現部分在B類中。也就是說,B類實現了amount函數,但并沒有權限調用,最終還是 由A類觸發調用。我們稱這樣的機制為“回調”。意思是“雖然函數的實現寫在B類中,但是真正的調用還是得由A類來完成。”正常函數“函數聲明、實現均在一個類中完成。”

一句大白話理解“回調”的概念:“函數的實現部分雖然不在老家(A類),但是最終的調用還是由老家人完成”,這樣的函數就叫做回調函數。“老家人調用你,就叫回調,因為你本來就屬于老家。

用《無間道》理解“回調函數”概念:

香港警務處(類):

招聘了一名警察張三(聲明函數),并培養、訓練他(實現函數)。

招聘了一名警察陳仁貴(聲明函數),但并沒有培養他,而是被送進了三合會。但有任務的時候,警務處會調用陳仁貴(回調函數)。

廉政總署(類):使用警務處的張三(普通調用)。

三合會(類):培養、訓練陳仁貴(實現函數)。

第二個問題:什么情況下使用回調函數?

假設有A、B兩個類。

(1)A類有多種形態,要在B類中實現回調函數。如假設A類是網絡請求開源類ASIHttpRequest,它可能請求成功,也可能請求失敗。這個時候,B類就要針對以上兩個情況,作不同的處理。

(2)A類的形態由B類決定時,要在B類中實現回調函數。如UITableView類就會提供很多回調函數(iOS專業術語稱“委托”方法)

(3)A類需要向B類傳遞數據時,可以在B類中實現回調函數(A類一般是數據層比較耗時的操作類)。如舉的那個發工資的例子。在實際編程中,這樣的機制有個好處就是可以提升用戶的操作體驗。比如用戶從X頁面跳轉到Y頁面,需要向網絡請求數據,而且比較耗時,那我們怎么辦?有三種方案:第一種就是在X頁面展示一個旋轉指示器,當收到網絡傳回的數據時,在展現Y頁面。第二種就是使用回調函數。用戶從X頁面直接跳轉到Y頁面,Y頁面需要到數據讓數據層去執行,當收到數據時,再在Y頁面展現。第三種就是在Y頁面中開啟多線程。讓一個子線程專門到后臺去取數據。綜合來說,第二種更加簡介易懂,而且代碼緊湊。

第三個問題:使用回調函數有什么好處?

(1)可以讓實現方,根據回調方的多種形態進行不同的處理和操作。(ASIHttpRequest)

(2)可以讓實現方,根據自己的需要定制回調方的不同形態。(UITableView)

(3)可以將耗時的操作隱藏在回調方,不影響實現方其它信息的展示。

(4)讓代碼的邏輯更加集中,更加易讀。

什么是回調函數?——就是由聲明函數的類來調用的函數叫做回調函數。普通函數可以讓任何類調用。

“回調”的主語是誰?——聲明“回調函數”的那個類。

Block、委托、通知、回調函數,它們雖然名字不一樣,但是原理都一樣,都是“回調機制”的思想的具體實現!

iOS 10的時候NSTimer新增了一個帶block的API:

 

復制代碼 代碼如下:
+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)interval repeats:(BOOL)repeats block:(void (^)(NSTimer *timer))block API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0));

 

蘋果的官方文檔里說,將這個timer本身作為參數傳給block以此來避免循環引用:

/// - parameter:  block  The execution body of the timer; the timer itself is passed as the parameter to this block when executed to aid in avoiding cyclical references

有了這個API再也不需要繁瑣的手動注銷timer,結合weakSelf就可以輕松處理循環引用,如:

?
1
2
3
4
5
__weak typeof(self) weakSelf = self;
self.timer = [NSTimer scheduledTimerWithTimeInterval:1 repeats:YES block:^(NSTimer * _Nonnull timer) {
  __strong typeof(self) strongSelf = weakSelf;
  [strongSelf printNum];
}];

在這個API出現之前,self和timer的引用關系是:self->timer->self

現在的引用關系是:self->timer->weakSelf

但是只有iOS 10及之后的系統才能使用此API,而我們一般都是適配到iOS 8,所以有必要擴展一下。

如何擴展?

簡單點,寫個category,直接復制蘋果的API進去(思考API設計的時間都省了

延伸 · 閱讀

精彩推薦
  • IOSiOS開發之視圖切換

    iOS開發之視圖切換

    在iOS開發中視圖的切換是很頻繁的,獨立的視圖應用在實際開發過程中并不常見,除非你的應用足夠簡單。在iOS開發中常用的視圖切換有三種,今天我們將...

    執著丶執念5282021-01-16
  • IOSiOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)

    iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和

    這篇文章主要介紹了iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)的相關資料,需要的朋友可以參考下...

    CodingFire13652021-02-26
  • IOSiOS開發技巧之狀態欄字體顏色的設置方法

    iOS開發技巧之狀態欄字體顏色的設置方法

    有時候我們需要根據不同的背景修改狀態欄字體的顏色,下面這篇文章主要給大家介紹了關于iOS開發技巧之狀態欄字體顏色的設置方法,文中通過示例代碼...

    夢想家-mxj8922021-05-10
  • IOS詳解iOS中多個網絡請求的同步問題總結

    詳解iOS中多個網絡請求的同步問題總結

    這篇文章主要介紹了詳解iOS中多個網絡請求的同步問題總結,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    liang199111312021-03-15
  • IOSiOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    這篇文章主要介紹了iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果的相關資料,需要的朋友可以參考下...

    jiangamh8882021-01-11
  • IOSiOS中MD5加密算法的介紹和使用

    iOS中MD5加密算法的介紹和使用

    MD5加密是最常用的加密方法之一,是從一段字符串中通過相應特征生成一段32位的數字字母混合碼。對輸入信息生成唯一的128位散列值(32個字符)。這篇文...

    LYSNote5432021-02-04
  • IOSiOS中UILabel實現長按復制功能實例代碼

    iOS中UILabel實現長按復制功能實例代碼

    在iOS開發過程中,有時候會用到UILabel展示的內容,那么就設計到點擊UILabel復制它上面展示的內容的功能,也就是Label長按復制功能,下面這篇文章主要給大...

    devilx12792021-04-02
  • IOSiOS實現控制屏幕常亮不變暗的方法示例

    iOS實現控制屏幕常亮不變暗的方法示例

    最近在工作中遇到了要將iOS屏幕保持常亮的需求,所以下面這篇文章主要給大家介紹了關于利用iOS如何實現控制屏幕常亮不變暗的方法,文中給出了詳細的...

    隨風13332021-04-02
主站蜘蛛池模板: 一级做受大片免费视频 | 九九热精品视频在线播放 | 毛片小网站 | 免费黄网站在线播放 | 国产成人综合在线观看 | 久久色伦理资源站 | xxxxxx视频| 国内久久久久 | 一区二区三区四区在线观看视频 | 亚洲国产精品久久久久久久久 | 牛牛碰在线| 色羞羞| 亚洲一区二区三区视频 | 欧美18一12sex性处hd | 亚洲综合中文 | 成人久久18免费 | 免费观看三级毛片 | 黄色网址在线播放 | 神马福利电影 | 97久色| 日韩视频1 | 亚洲精品 在线播放 | 斗罗破苍穹在线观看免费完整观看 | 欧美精品久久久久久久多人混战 | 国色天香综合网 | 久久人人av| 日本中文字幕电影在线观看 | 久久伊人国产精品 | 免费亚洲视频在线观看 | 黄色片在线播放 | 韩国精品一区二区三区四区五区 | 中文字幕观看 | 55夜色66夜色国产精品视频 | 激情视频在线播放 | 一男一女一级毛片 | av免费片 | 欧美一区二区三区久久 | 成人免费国产视频 | 亚洲男人天堂 | 九九热免费视频在线观看 | 一级毛片免费大片 |