響應式編程的概念:
在網(wǎng)上流傳一個非常經(jīng)典的解釋“響應式編程的概念”:在程序開發(fā)中辐烂,a=b+c淆衷,賦值之后b或者c的值變化后亏掀,a的值不會跟著變化忱反。響應式編程泛释,目標就是,如果b 或者c的數(shù)值發(fā)生變化温算,a的數(shù)值會同時發(fā)生變化怜校。
iOS中常用響應式編程有:代理、通知注竿、block
三種編程的區(qū)別
NotificationCenter 通知中心:
1茄茁、“一對多”,在APP中巩割,很多控制器都需要知道一個事件裙顽,應該用通知;
delegate 代理委托:委托其實是一種設(shè)計模式喂分,通俗一點來講就是當自己有需求要處理但是不方便的時候锦庸,就建立一個委托,請別人來幫忙處理蒲祈。
1甘萧、“一對一”,對同一個協(xié)議梆掸,一個對象只能設(shè)置一個代理delegate,所以單例對象就不能用代理酸钦;(單例只有一個對象怪得,如果多次設(shè)置代理卑硫,代理被重新賦值,只有最后一次設(shè)置代理能夠響應協(xié)議方法欢伏。)
2、代理更注重過程信息的傳輸:比如發(fā)起一個網(wǎng)絡請求硝拧,可能想要知道此時請求是否已經(jīng)開始径筏、是否收到了數(shù)據(jù)障陶、數(shù)據(jù)是否已經(jīng)接受完成、數(shù)據(jù)接收失敗
3抱究、如果我們要實現(xiàn)一個delegate委托恢氯,就先要先定義protocol(協(xié)議),在指定收到回調(diào)的類中去實現(xiàn)協(xié)議中的函數(shù),如果沒有實現(xiàn)勋拟,編譯器就會報警告遏暴;(delegate需要定義協(xié)議方法,代理對象需要實現(xiàn)協(xié)議方法并且需要建立代理關(guān)系才可以實現(xiàn)通信指黎。)
block(閉包) :
1朋凉、block和delegate一樣,一般都是“一對一”之間通信交互
2醋安、相比代理杂彭,block寫法更簡練,不需要寫protocol吓揪、函數(shù)等等
3亲怠、block注重結(jié)果的傳輸:比如對于一個事件,只想知道成功或者失敗柠辞,并不需要知道進行了多少或者額外的一些信息
4团秽、block需要注意防止循環(huán)引用
5、block常常結(jié)合typedef來使用叭首,用自己定義的類型去創(chuàng)建block顯得更加的簡單便捷