首先,很感謝網(wǎng)易小哥哥,我又發(fā)現(xiàn)了我的知識儲備不足的地方,這篇Blog記錄我平時學習的盲點,并希望自己不斷進步。
有幾個問題沒答上來,這里詳細記錄一下。
1.block的內(nèi)存數(shù)據(jù)類型是什么?block和函數(shù)有什么區(qū)別?使用block需要注意什么?
struct Block_descriptor {
unsigned long int reserved;
unsigned long int size;
void (*copy)(void *dst, void *src);
void (*dispose)(void *);
};
struct Block_layout {
void *isa;
int flags;
int reserved;
void (*invoke)(void *, ...);
struct Block_descriptor *descriptor;
/* Imported variables. */
};
很顯然是個結構體,里面有一個isa指針,指向了自己的類。還有一個函數(shù)指針,指向block代碼塊。
使用block需要注意兩點:
- 一個是變量傳遞到block結構體中,僅僅是值傳遞,所以在block中修改變量是不會影響到外面的變量的。
只有加上了__block關鍵字,才可以改變外部的變量。(有點類似于C++函數(shù)里,實參和形參的區(qū)別)- 另一個是防止block對self持有,造成循環(huán)引用->內(nèi)存泄漏。解決方法:在外面__weak一下self,再在block內(nèi)部__strong一下self。
2.HTTPS和HTTP的差別在哪?有什么改進和優(yōu)點。
超文本傳輸協(xié)議HTTP協(xié)議被用于在Web瀏覽器和網(wǎng)站服務器之間傳遞信息。HTTP協(xié)議以明文方式發(fā)送內(nèi)容,不提供任何方式的數(shù)據(jù)加密,如果攻擊者截取了Web瀏覽器和網(wǎng)站服務器之間的傳輸報文,就可以直接讀懂其中的信息,因此HTTP協(xié)議不適合傳輸一些敏感信息,比如信用卡號、密碼等。
為了解決HTTP協(xié)議的這一缺陷,需要使用另一種協(xié)議:安全套接字層超文本傳輸協(xié)議HTTPS。為了數(shù)據(jù)傳輸?shù)陌踩?,HTTPS在HTTP的基礎上加入了SSL/TLS協(xié)議,SSL/TLS依靠證書來驗證服務器的身份,并為瀏覽器和服務器之間的通信加密。
HTTPS和HTTP的區(qū)別主要為以下四點:
一、https協(xié)議需要到ca申請證書,一般免費證書很少,需要交費。
二、http是超文本傳輸協(xié)議,信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協(xié)議。
三、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
四、http的連接很簡單,是無狀態(tài)的;HTTPS協(xié)議是由SSL+HTTP協(xié)議構建的可進行加密傳輸、身份認證的網(wǎng)絡協(xié)議,比http協(xié)議安全。
總結:HTTPS = HTTP + SSL / TLS
SSL 握手驗證協(xié)議
TLS 安全傳輸協(xié)議
實現(xiàn)了加密和身份認證
用到了非對稱加密(公鑰、私鑰)、CA證書=>為了驗證公鑰是否偽造
HTTPS是以安全為目標的HTTP通道,簡單的講是HTTP的安全版
HTTP沒有任何的加密以及身份驗證機制,很容易被竊聽、篡改。
因此會造成個人隱私泄露、惡意的劫持等嚴重的安全問題。
3.三次握手協(xié)議:
三次握手
4.iOS事件傳遞的過程(事件響應呢??)參考資料
過程:
->產(chǎn)生觸摸事件UIEvent
->UIApplication事件隊列
->[UIWindow hitTest:withEvent:]
->返回更合適的view
->[子控件 hitTest:withEvent:](有就繼續(xù)調(diào)用hitTest,沒有更合適的就返回自身。。。進入遞歸遍歷狀態(tài)。。)
->返回最合適的view
hitTest解釋:事件傳遞給窗口或控件的后,就調(diào)用hitTest:withEvent:方法尋找更合適的view。所以是,先傳遞事件,再根據(jù)事件在自己身上找更合適的view。
不管子控件是不是最合適的view,系統(tǒng)默認都要先把事件傳遞給子控件,經(jīng)過子控件調(diào)用自己的hitTest:withEvent:方法驗證后才知道有沒有更合適的view。即便父控件是最合適的view了,子控件的hitTest:withEvent:方法還是會調(diào)用,不然怎么知道有沒有更合適的!即,如果確定最終父控件是最合適的view,那么該父控件的子控件的hitTest:withEvent:方法也是會被調(diào)用的。
5.事件的響應:實際上是事件傳遞的逆過程 通過不斷向上傳遞,將試圖展示給用戶

響應者對象:能處理事件的對象,也就是繼承自UIResponder的對象
作用:能很清楚的看見每個響應者之間的聯(lián)系,并且可以讓一個事件多個對象處理。如何判斷上一個響應者?
1> 如果當前這個view是控制器的view,那么控制器就是上一個響應者
2> 如果當前這個view不是控制器的view,那么父控件就是上一個響應者響應者鏈的事件傳遞過程:
1>如果當前view是控制器的view,那么控制器就是上一個響應者,事件就傳遞給控制器;如果當前view不是控制器的view,那么父視圖就是當前view的上一個響應者,事件就傳遞給它的父視圖
2>在視圖層次結構的最頂級視圖,如果也不能處理收到的事件或消息,則其將事件或消息傳遞給window對象進行處理
3>如果window對象也不處理,則其將事件或消息傳遞給UIApplication對象
4>如果UIApplication也不能處理該事件或消息,則將其丟棄事件的傳遞和響應的區(qū)別:
事件的傳遞是從上到下(父控件到子控件),事件的響應是從下到上(順著響應者鏈條向上傳遞:子控件到父控件。
6.AFN3.0和2.0差別在哪里?
https://blog.csdn.net/u012411480/article/details/51678472
