在項(xiàng)目什么時(shí)候選擇使用GCD罪既,什么時(shí)候選擇NSOperation?
項(xiàng)目中使用NSOperation的優(yōu)點(diǎn)是NSOperation是對線程的高度抽象萝衩,在項(xiàng)目中使用它,會使項(xiàng)目的程序結(jié)構(gòu)更好没咙,子類化NSOperation的設(shè)計(jì)思路,是具有面向?qū)ο蟮膬?yōu)點(diǎn)(復(fù)用祭刚、封裝),使得實(shí)現(xiàn)是多線程支持涡驮,而接口簡單暗甥,建議在復(fù)雜項(xiàng)目中使用捉捅。
項(xiàng)目中使用GCD的優(yōu)點(diǎn)是GCD本身非常簡單撤防、易用棒口,對于不復(fù)雜的多線程操作寄月,會節(jié)省代碼量无牵,而Block參數(shù)的使用漾肮,會是代碼更為易讀茎毁,建議在簡單項(xiàng)目中使用克懊。
你用過NSOperationQueue么?如果用過或者了解的話七蜘,你為什么要使用NSOperationQueue,實(shí)現(xiàn)了什么?請描述它和GCD的區(qū)別和類似的地方(提示:可以從兩者的實(shí)現(xiàn)機(jī)制和適用范圍來描述)
1> GCD是純C語言的API橡卤,NSOperationQueue是基于GCD的OC版本封裝
2> GCD只支持FIFO的隊(duì)列夜只,NSOperationQueue可以很方便地調(diào)整執(zhí)行順序蒜魄、設(shè)置最大并發(fā)數(shù)量
3> NSOperationQueue可以在輕松在Operation間設(shè)置依賴關(guān)系扔亥,而GCD需要寫很多的代碼才能實(shí)現(xiàn)
4> NSOperationQueue支持KVO谈为,可以監(jiān)測operation是否正在執(zhí)行(isExecuted)旅挤、是否結(jié)束(isFinished)伞鲫,是否取消(isCanceld)
5> GCD的執(zhí)行速度比NSOperationQueue快
任務(wù)之間不太互相依賴:GCD
任務(wù)之間有依賴\或者要監(jiān)聽任務(wù)的執(zhí)行情況:NSOperationQueue
什么是TCP連接的三次握手
第一次握手:客戶端發(fā)送syn包(syn=j)到服務(wù)器粘茄,并進(jìn)入SYN_SEND狀態(tài)秕脓,等待服務(wù)器確認(rèn)柒瓣;
第二次握手:服務(wù)器收到syn包吠架,必須確認(rèn)客戶的SYN(ack=j+1)芙贫,同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k)傍药,即SYN+ACK包磺平,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài)拐辽;
第三次握手:客戶端收到服務(wù)器的SYN+ACK包拣挪,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1)俱诸,此包發(fā)送完畢菠劝,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài)睁搭,完成三次握手赶诊。
握手過程中傳送的包里不包含數(shù)據(jù)介袜,三次握手完畢后甫何,客戶端與服務(wù)器才正式開始傳送數(shù)據(jù)遇伞。理想狀態(tài)下辙喂,TCP連接一旦建立鸠珠,在通信雙方中的任何一方主動(dòng)關(guān)閉連接之前巍耗,TCP 連接都將被一直保持下去渐排。斷開連接時(shí)服務(wù)器和客戶端均可以主動(dòng)發(fā)起斷開TCP連接的請求炬太,斷開過程需要經(jīng)過“四次握手”(過程就不細(xì)寫了驯耻,就是服務(wù)器和客戶端交互亲族,最終確定斷開)
__block和__weak修飾符的區(qū)別其實(shí)是挺明顯的:
1.__block不管是ARC還是MRC模式下都可以使用,可以修飾對象霎迫,還可以修飾基本數(shù)據(jù)類型。
2.__weak只能在ARC模式下使用知给,也只能修飾對象(NSString)瓤帚,不能修飾基本數(shù)據(jù)類型(int)涩赢。
3.__block對象可以在block中被重新賦值戈次,__weak不可以筒扒。
4.__block對象在ARC下可能會導(dǎo)致循環(huán)引用怯邪,非ARC下會避免循環(huán)引用霎肯,__weak只在ARC下使用擎颖,可以避免循環(huán)引用观游。