面試題匯總kg_第1頁(yè)
面試題匯總kg_第2頁(yè)
面試題匯總kg_第3頁(yè)
面試題匯總kg_第4頁(yè)
面試題匯總kg_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、序號(hào)問(wèn)題1 1月月7 7日日面面試試題題匯匯總總1什么是TCP連接的三次握手2http協(xié)議的組成和特性;3怎樣防止指針的越界使用問(wèn)題?4談?wù)剋ebView的作用5FMDB的使用和對(duì)多張表的處理6說(shuō)說(shuō)數(shù)據(jù)庫(kù)的左連接和右連接的區(qū)別7What is purpose of delegates?代理的作用?8What are mutable and immutabletypes in Objective C?obc中可修改和不可以修改類(lèi)型。9When we call objective c is runtimelanguage what does it mean?我們說(shuō)的obc是動(dòng)態(tài)運(yùn)行時(shí)語(yǔ)言是什么意思

2、?10Polymorphism?關(guān)于多態(tài)性11簡(jiǎn)單說(shuō)一下時(shí)間響應(yīng)的流程?12UIscrollVew用到了什么設(shè)計(jì)模式?還能再foundation庫(kù)中找到類(lèi)似的嗎?13動(dòng)態(tài)綁定在運(yùn)行時(shí)確定要調(diào)用的方法1 1月月6 6日日面面試試題題匯匯總總1自自動(dòng)動(dòng)釋釋放放池池是是什什么么, ,如如何何工工作作2obj-c有私有方法么?私有變量呢?3什么是鍵-值,鍵路徑是什么4SDWebImage內(nèi)部實(shí)現(xiàn)過(guò)程5UITableViewCell的重用機(jī)制6Category和繼承的區(qū)別7#import跟#include的區(qū)別?8請(qǐng)寫(xiě)出你對(duì)MVC模式的理解9Objective-C如何對(duì)內(nèi)存管理的,說(shuō)說(shuō)你的看法和解決方法

3、?10在項(xiàng)目什么時(shí)候選擇使用GCD,什么時(shí)候選擇NSOperation?11OC中的協(xié)議和java中的接口概念有何不同?12c和obj-c如何混用13如果有人惡意重復(fù)注冊(cè)賬號(hào),讓我寫(xiě)一個(gè)接口我怎么防止這樣的事情。14淺拷貝和深拷貝區(qū)別是什么15鏈表和數(shù)組的區(qū)別16Object-C有多繼承嗎?沒(méi)有的話用什么代替?cocoa中所有的類(lèi)都是NSObject 的子類(lèi)1 1月月6 6日日之之前前在Xcode中,需要編譯混合Objective-C和C+的源碼文件,需要將文件格式的后綴改為 ()在Objective-C聲明一個(gè)類(lèi)所要用到的編譯指令是 ()使用Xcode創(chuàng)建工程時(shí),支持同時(shí)創(chuàng)建的版本管理庫(kù)是使

4、用protocol時(shí),聲明一組可選擇實(shí)現(xiàn)與否的函數(shù),需要在聲明的前一行加上需要在手動(dòng)管理內(nèi)存分配和釋放的Xcode項(xiàng)目中引入和編譯用ARC風(fēng)格編寫(xiě)的文件,需要在文件的CompilerFlags上添加參數(shù)項(xiàng)目開(kāi)發(fā)流程、上架流程、上架遇到的問(wèn)題及處理的方案,網(wǎng)絡(luò)處理、AFN、http協(xié)議、app和H5頁(yè)面的交互、SDWebImage的底層實(shí)現(xiàn)最常使用的地圖是什么?集成地圖時(shí)都使用了哪些技術(shù)?集成地圖有什么用?使用過(guò)友盟嗎?使用過(guò)融云嗎?怎樣實(shí)現(xiàn)信息的共享?簡(jiǎn)單給出購(gòu)物車(chē)的實(shí)現(xiàn)思路?分析一下使用手機(jī)獲取驗(yàn)證碼注冊(cè)賬號(hào)的實(shí)現(xiàn)邏輯(給了一個(gè)示例圖),發(fā)送到手機(jī)的驗(yàn)證碼超過(guò)60秒鐘后重新發(fā)送常使用的支付方

5、式有哪些?介紹一下集成邏輯手寫(xiě)一下單例方法說(shuō)說(shuō)NSOperation 和 GCD 的區(qū)別你實(shí)現(xiàn)過(guò)一個(gè)框架或者庫(kù)以供別人使用么?如果有,請(qǐng)談一談構(gòu)建框架或者庫(kù)時(shí)候的經(jīng)驗(yàn);如果沒(méi)有,請(qǐng)?jiān)O(shè)想和設(shè)計(jì)框架的public的API,并指出大概需要如何做、需要注意一些什么方面,來(lái)使別人容易地使用你的框架。答案第一次握手:客戶(hù)端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn);第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶(hù)的SYN(ack=j+1),同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k),即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài);第三次握手:客戶(hù)端收到服務(wù)器的SYNA

6、CK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢,客戶(hù)端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手。握手過(guò)程中傳送的包里不包含數(shù)據(jù),三次握手完畢后,客戶(hù)端與服務(wù)器才正式開(kāi)始傳送數(shù)據(jù)。理想狀態(tài)下,TCP連接一旦建立,在通信雙方中的任何一方主動(dòng)關(guān)閉連接之前,TCP連接都將被一直保持下去。斷開(kāi)連接時(shí)服務(wù)器和客戶(hù)端均可以主動(dòng)發(fā)起斷開(kāi)TCP連接的請(qǐng)求,斷開(kāi)過(guò)程需要經(jīng)過(guò)“四次握手”(過(guò)程就不細(xì)寫(xiě)了,就是服務(wù)器和客戶(hù)端交互,最終確定斷開(kāi))組成:http請(qǐng)求由三部分組成,分別是:請(qǐng)求行、消息報(bào)頭、請(qǐng)求正文 特性:HTTP協(xié)議的主要特點(diǎn)可概括如下:1.支持客戶(hù)/服務(wù)器模式。2.簡(jiǎn)單快速

7、:客戶(hù)向服務(wù)器請(qǐng)求服務(wù)時(shí),只需傳送請(qǐng)求方法和路徑。請(qǐng)求方法常用的有GET、HEAD、POST。每種方法規(guī)定了客戶(hù)與服務(wù)器聯(lián)系的類(lèi)型不同。由于HTTP協(xié)議簡(jiǎn)單,使得HTTP服務(wù)器的程序規(guī)模小,因而通信速度很快。3.靈活:HTTP允許傳輸任意類(lèi)型的數(shù)據(jù)對(duì)象。正在傳輸?shù)念?lèi)型由Content-Type加以標(biāo)記。4.無(wú)連接:無(wú)連接的含義是限制每次連接只處理一個(gè)請(qǐng)求。服務(wù)器處理完客戶(hù)的請(qǐng)求,并收到客戶(hù)的應(yīng)答后,即斷開(kāi)連接。采用這種方式可以節(jié)省傳輸時(shí)間。5.無(wú)狀態(tài):HTTP協(xié)議是無(wú)狀態(tài)協(xié)議。無(wú)狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒(méi)有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導(dǎo)致每次連接傳

8、送的數(shù)據(jù)量增大。另一方面,在服務(wù)器不需要先前信息時(shí)它的應(yīng)答就較快。必須讓指針指向一個(gè)有效的內(nèi)存地址, 1防止數(shù)組越界2防止向一塊內(nèi)存中拷貝過(guò)多的內(nèi)容 3防止使用空指針 4防止改變const修改的指針 5防止改變指向靜態(tài)存儲(chǔ)區(qū)的內(nèi)容6防止兩次釋放一個(gè)指針 7防止使用野指針.http:/ 數(shù)據(jù)庫(kù)左連接和右連接的區(qū)別:主表不一樣通過(guò)左連接和右連接,最小條數(shù)為3(記錄條數(shù)較小的記錄數(shù)),最大條數(shù)為12(34)http:/ 主要是將數(shù)據(jù)類(lèi)型的確定由編譯時(shí),推遲到了運(yùn)行時(shí)。這個(gè)問(wèn)題其實(shí)淺涉及到兩個(gè)概念,運(yùn)行時(shí)和多態(tài)。簡(jiǎn)單來(lái)說(shuō),運(yùn)行時(shí)機(jī)制使我們直到運(yùn)行時(shí)才去決定一個(gè)對(duì)象的類(lèi)別,以及調(diào)用該類(lèi)別對(duì)象指定方法。多

9、態(tài):不同對(duì)象以自己的方式響應(yīng)相同的消息的能力叫做多態(tài)。意思就是假設(shè)生物類(lèi)(life)都用有一個(gè)相同的方法-eat;那人類(lèi)屬于生物,豬也屬于生物,都繼承了life后,實(shí)現(xiàn)各自的eat,但是調(diào)用是我們只需調(diào)用各自的eat方法。也就是不同的對(duì)象以自己的方式響應(yīng)了相同的消息(響應(yīng)了eat這個(gè)選擇器)。因此也可以說(shuō),運(yùn)行時(shí)機(jī)制是多態(tài)的基礎(chǔ)?多態(tài),子類(lèi)指針可以賦值給父類(lèi)。這個(gè)題目其實(shí)可以出到一切面向?qū)ο笳Z(yǔ)言中,因此關(guān)于多態(tài),繼承和封裝基本最好都有個(gè)自我意識(shí)的理解,也并非一定要把書(shū)上資料上寫(xiě)的能背出來(lái)。最重要的是轉(zhuǎn)化成自我理解。一個(gè)UIView發(fā)出一個(gè)事件之后,首先上傳給其父視圖;父視圖上傳給其所在的控制器

10、;如果其控制器對(duì)事件進(jìn)行處理,事件傳遞將終止,否則繼續(xù)上傳父視圖;直到遇到響應(yīng)者才會(huì)停止,否則事件將一直上傳,直到UIWindow。模板模式,所有datasource和delegate接口都是模板模式的典型應(yīng)用,組合模式composition,所有的containerview都用了這個(gè)模式觀察者模式observer,所有的UIResponder都用了這個(gè)模式動(dòng)態(tài)綁定將調(diào)用方法的確定也推遲到運(yùn)行時(shí)。在編譯時(shí),方法的調(diào)用并不和代碼綁定在一起,只有在消實(shí)發(fā)送出來(lái)之后,才確定被調(diào)用的代碼。通過(guò)動(dòng)態(tài)類(lèi)型和動(dòng)態(tài)綁定技術(shù),您的代碼每次執(zhí)行都可以得到不同的結(jié)果。運(yùn)行時(shí)因子負(fù)責(zé)確定消息的接 收者和被調(diào)用的方法。

11、運(yùn)行時(shí)的消息分發(fā)機(jī)制為動(dòng)態(tài)綁定提供支持。當(dāng)您向一個(gè)動(dòng)態(tài)類(lèi)型確定了的對(duì)象發(fā)送消息時(shí),運(yùn)行環(huán)境系統(tǒng)會(huì)通過(guò)接收者的isa指針定位對(duì)象的類(lèi),并以此為起點(diǎn)確定被調(diào)用的方法,方法和消息是動(dòng)態(tài)綁定的。而且,您不必在Objective-C 代碼中做任何工作,就可以自動(dòng)獲取動(dòng)態(tài)綁定的好處當(dāng)您向一個(gè)對(duì)象發(fā)送一個(gè)autorelease消息時(shí),Cocoa就會(huì)將該對(duì)象的一個(gè)引用放入到最新的自動(dòng)釋放池。它仍然是個(gè)正當(dāng)?shù)膶?duì)象,因此自動(dòng)釋放池定義的作用域內(nèi)的其它對(duì)象可以向它發(fā)送消息。當(dāng)程序執(zhí)行到作用域結(jié)束的位置時(shí),自動(dòng)釋放池就會(huì)被釋放,池中的所有對(duì)象也就被釋放。1. ojc-c是通過(guò)一種referringcounting(引

12、用計(jì)數(shù))的方式來(lái)管理內(nèi)存的,對(duì)象在開(kāi)始分配內(nèi)存(alloc)的時(shí)候引用計(jì)數(shù)為一,以后每當(dāng)碰到有copy,retain的時(shí)候引用計(jì)數(shù)都會(huì)加一,每當(dāng)碰到release和autorelease的時(shí)候引用計(jì)數(shù)就會(huì)減一,如果此對(duì)象的計(jì)數(shù)變?yōu)榱?,就會(huì)被系統(tǒng)銷(xiāo)毀.2. NSAutoreleasePool就是用來(lái)做引用計(jì)數(shù)的管理工作的,這個(gè)東西一般不用你管的.3. autorelease和release沒(méi)什么區(qū)別,只是引用計(jì)數(shù)減一的時(shí)機(jī)不同而已,autorelease會(huì)在對(duì)象的使用真正結(jié)束的時(shí)候才做引用計(jì)數(shù)減一.在Objective-C中沒(méi)有私有方法,只有靜態(tài)方法和實(shí)例方法。但是可以用private修飾私有

13、變量。模型的性質(zhì)是通過(guò)一個(gè)簡(jiǎn)單的鍵(通常是個(gè)字符串)來(lái)指定的。視圖和控制器通過(guò)鍵來(lái)查找相應(yīng)的屬性值。在一個(gè)給定的實(shí)體中,同一個(gè)屬性的所有值具有相同的數(shù)據(jù)類(lèi)型。鍵-值編碼技術(shù)用于進(jìn)行這樣的查找它是一種間接訪問(wèn)對(duì)象屬性的機(jī)制。 鍵路徑是一個(gè)由用點(diǎn)作分隔符的鍵組成的字符串,用于指定一個(gè)連接在一起的對(duì)象性質(zhì)序列。第一個(gè)鍵的性質(zhì)是由先前的性質(zhì)決定的,接下來(lái)每個(gè)鍵的值也是相對(duì)于其前面的性質(zhì)。鍵路徑使您可以以獨(dú)立于模型實(shí)現(xiàn)的方式指定相關(guān)對(duì)象的性質(zhì)。通過(guò)鍵路徑,您可以指定對(duì)象圖中的一個(gè)任意深度的路徑,使其指向相關(guān)對(duì)象的特定屬性.入口 setImageWithURL:placeholderImage:optio

14、ns: 會(huì)先placeholderImage 顯示,然后 SDWebImageManager 根據(jù) URL開(kāi)始處理圖片。進(jìn)入SDWebImageManager-downloadWithURL:delegate:options:userInfo:,交給 SDImageCache從緩存查找圖片是否已經(jīng)下載queryDiskCacheForKey:delegate:userInfo:.先從內(nèi)存圖片緩存查找是否有圖片,如果內(nèi)存中已經(jīng)有圖片緩存,SDImageCacheDelegate 回調(diào) imageCache:didFindImage:forKey:userInfo: 到 SDWebImageMan

15、ager。SDWebImageManagerDelegate 回調(diào)webImageManager:didFinishWithImage: 到 UIImageView+WebCache 等前端展示圖片。如果內(nèi)存緩存中沒(méi)有,生成 NSInvocationOperation 添加到隊(duì)列開(kāi)始從硬盤(pán)查找圖片是否已經(jīng)緩存。根據(jù) URLKey 在硬盤(pán)緩存目錄下嘗試讀取圖片文件。這一步是在 NSOperation 進(jìn)行的操作,所以回主線程進(jìn)行結(jié)果回調(diào)notifyDelegate:。如果上一操作從硬盤(pán)讀取到了圖片,將圖片添加到內(nèi)存緩存中(如果空閑內(nèi)存過(guò)小,會(huì)先清空內(nèi)存緩存)。SDImageCacheDelega

16、te回調(diào)imageCache:didFindImage:forKey:userInfo:。進(jìn)而回調(diào)展示圖片。如果從硬盤(pán)緩存目錄讀取不到圖片,說(shuō)明所有緩存都不存在該圖片,需要下載圖片,回調(diào) imageCache:didNotFindImageForKey:userInfo:。共享或重新生成一個(gè)下載器 SDWebImageDownloader 開(kāi)始下載圖片。圖片下載由NSURLConnection 來(lái)做,實(shí)現(xiàn)相關(guān) delegate 來(lái)判斷圖片下載中、下載完成和下載失敗。connection:didReceiveData: 中利用 ImageIO 做了按圖片下載進(jìn)度加載效果。connectionDi

17、dFinishLoading: 數(shù)據(jù)下載完成后交給SDWebImageDecoder 做圖片解碼處理。圖片解碼處理在一個(gè)NSOperationQueue 完成,不會(huì)拖慢主線程 UI。如果有需要對(duì)下載的圖片進(jìn)行二次處理,最好也在這里完成,效率會(huì)好很多。UITableView只會(huì)創(chuàng)建一屏幕(或一屏幕多一點(diǎn))的 UITableViewCell,其他都是從中取出來(lái)重用的。每當(dāng)Cell滑出屏幕時(shí),就會(huì)放入到一個(gè)集合(或數(shù)組)中(這里就相當(dāng)于一個(gè)重用池),當(dāng)要 顯示某一位置的Cell時(shí),會(huì)先去集合(或數(shù)組)中取,如果有,就直接拿來(lái)顯示;如果沒(méi)有,才會(huì)創(chuàng)建。這樣做的好處可想而知,極大的減少了內(nèi)存的開(kāi)銷(xiāo)。Pr

18、otocol是定義行為而不管誰(shuí)去怎么實(shí)現(xiàn),這是一種比較灑脫和不負(fù)責(zé)的情況,就好像在外包項(xiàng)目中的客戶(hù)一樣,他只是他需要什么什么東西,具體實(shí)現(xiàn)他不會(huì)也不能給出一樣。delegate datasource這樣的就用protocol實(shí)現(xiàn)比較好。Category是對(duì)一個(gè)功能完備的類(lèi)的一種補(bǔ)充,就像是一個(gè)東西的主要基本功能都完成了,可以用category為這個(gè)類(lèi)添加不同的組件,使得 這個(gè)類(lèi)能夠適應(yīng)不同情況的需求(但是這些不同需求最核心的需求要一致)。繼承則是都可以完成上面的工作,但是繼承有很大的代價(jià)問(wèn)題,一是通過(guò)繼承來(lái)進(jìn)行擴(kuò)展是一種耦合很高的行為,對(duì)父類(lèi)可以說(shuō)是完全依賴(lài);二是繼承由于 對(duì)父類(lèi)依賴(lài),所以開(kāi)發(fā)

19、代價(jià)相對(duì)大,要求對(duì)父類(lèi)的工作流程相對(duì)熟悉;三是繼承體系如果太復(fù)雜會(huì)導(dǎo)致整個(gè)系統(tǒng)混亂,難以維護(hù)。所以在能夠用上面兩種方法完成擴(kuò) 展的時(shí)候,就千萬(wàn)不要使用繼承。前者不會(huì)引起交叉編譯的問(wèn)題。因?yàn)樵贠bjective-C中會(huì)存在C/C+和Object-C混編的問(wèn)題,如果用include引入頭文件,會(huì)導(dǎo)致交叉編譯。MVC模式考慮三種對(duì)象:模型對(duì)象、視圖對(duì)象和控制器對(duì)象。模型對(duì)象負(fù)責(zé)應(yīng)用程序的數(shù)據(jù)和定義操作數(shù)據(jù)的邏輯;視圖對(duì)象知道如何顯示應(yīng)用程序的模型數(shù)據(jù);控制器對(duì)象是M與V之間的協(xié)調(diào)者.Objective-C的內(nèi)存管理主要有三種方式ARC(自動(dòng)內(nèi)存計(jì)數(shù))、手動(dòng)內(nèi)存計(jì)數(shù)、內(nèi)存池。1. (Garbage C

20、ollection)自動(dòng)內(nèi)存計(jì)數(shù):這種方式和java類(lèi)似,在你的程序的執(zhí)行過(guò)程中。始終有一個(gè)高人在背后準(zhǔn)確地幫你收拾垃圾,你不用考慮它什么時(shí)候開(kāi)始工作,怎樣工作。你只需要明白,我申請(qǐng)了一段內(nèi)存空間,當(dāng)我不再使用從而這段內(nèi)存成為垃圾的時(shí)候,我就徹底的把它忘記掉,反正那個(gè)高人會(huì)幫我收拾垃圾。遺憾的是,那個(gè)高人需要消耗一定的資源,在攜帶設(shè)備里面,資源是緊俏商品所以iPhone不支持這個(gè)功能。所以“Garbage Collection”不是本入門(mén)指南的范圍,對(duì)“GarbageCollection”內(nèi)部機(jī)制感興趣的同學(xué)可以參考一些其他的資料,不過(guò)說(shuō)老實(shí)話“Garbage Collection”不大適合適

21、初學(xué)者研究。解決: 通過(guò)alloc initial方式創(chuàng)建的, 創(chuàng)建后引用計(jì)數(shù)+1, 此后每retain一次引用計(jì)數(shù)+1, 那么在程序中做相應(yīng)次數(shù)的release就好了.2. (ReferenceCounted)手動(dòng)內(nèi)存計(jì)數(shù):就是說(shuō),從一段內(nèi)存被申請(qǐng)之后,就存在一個(gè)變量用于保存這段內(nèi)存被使用的次數(shù),我們暫時(shí)把它稱(chēng)為計(jì)數(shù)器,當(dāng)計(jì)數(shù)器變?yōu)?的時(shí)候,那么就是釋放這段內(nèi)存的時(shí)候。比如說(shuō),當(dāng)在程序A里面一段內(nèi)存被成功申請(qǐng)完成之后,那么這個(gè)計(jì)數(shù)器就從0變成1(我們把這個(gè)過(guò)程叫做alloc),然后程序B也需要使用這個(gè)內(nèi)存,那么計(jì)數(shù)器就從1變成了2(我們把這個(gè)過(guò)程叫做retain)。緊接著程序A不再需要這段內(nèi)

22、存了,那么程序A就把這個(gè)計(jì)數(shù)器減1(我們把這個(gè)過(guò)程叫做release);程序B也不再需要這段內(nèi)存的時(shí)候,那么也把計(jì)數(shù)器減1(這個(gè)過(guò)程還是release)。當(dāng)系統(tǒng)(也就是Foundation)發(fā)現(xiàn)這個(gè)計(jì)數(shù)器變成了0,那么就會(huì)調(diào)用內(nèi)存回收程序把這段內(nèi)存回收(我們把這個(gè)過(guò)程叫做dealloc)。順便提一句,如果沒(méi)有Foundation,那么維護(hù)計(jì)數(shù)器,釋放內(nèi)存等等工作需要你手工來(lái)完成。解決:一般是由類(lèi)的靜態(tài)方法創(chuàng)建的, 函數(shù)名中不會(huì)出現(xiàn)alloc或init字樣,如NSString string和NSArray arrayWithObject:, 創(chuàng)建后引用計(jì)數(shù)+0, 在函數(shù)出棧后釋放, 即相當(dāng)于一個(gè)

23、棧上的局部變量.當(dāng)然也可以通過(guò)retain延長(zhǎng)對(duì)象的生存期.3. (NSAutoRealeasePool)內(nèi)存池:可以通過(guò)創(chuàng)建和釋放內(nèi)存池控制內(nèi)存申請(qǐng)和回收的時(shí)機(jī).解決:是由autorelease加入系統(tǒng)內(nèi)存池, 內(nèi)存池是可以嵌套的, 每個(gè)內(nèi)存池都需要有一個(gè)創(chuàng)建釋放對(duì), 就像main函數(shù)中寫(xiě)的一樣. 使用也很簡(jiǎn)單,比如NSString allocinitialWithFormat:”Hey you!” autorelease, 即將一個(gè)NSString對(duì)象加入到最內(nèi)層的系統(tǒng)內(nèi)存池, 當(dāng)我們釋放這個(gè)內(nèi)存池時(shí), 其中的對(duì)象都會(huì)被釋放.項(xiàng)目中使用NSOperation的優(yōu)點(diǎn)是NSOperation是

24、對(duì)線程的高度抽象,在項(xiàng)目中使用它,會(huì)使項(xiàng)目的程序結(jié)構(gòu)更好,子類(lèi)化NSOperation的設(shè)計(jì)思路,是具有面向?qū)ο蟮膬?yōu)點(diǎn)(復(fù)用、封裝),使得實(shí)現(xiàn)是多線程支持,而接口簡(jiǎn)單,建議在復(fù)雜項(xiàng)目中使用。項(xiàng)目中使用GCD的優(yōu)點(diǎn)是GCD本身非常簡(jiǎn)單、易用,對(duì)于不復(fù)雜的多線程操作,會(huì)節(jié)省代碼量,而B(niǎo)lock參數(shù)的使用,會(huì)是代碼更為易讀,建議在簡(jiǎn)單項(xiàng)目中使用。OBC中的代理有2層含義,官方定義為 formal和informal protocol。前者和Java接口一樣。informal protocol中的方法屬于設(shè)計(jì)模式考慮范疇,不是必須實(shí)現(xiàn)的,但是如果有實(shí)現(xiàn),就會(huì)改變類(lèi)的屬性。其實(shí)關(guān)于正式協(xié)議,類(lèi)別和非正式協(xié)

25、議我很早前學(xué)習(xí)的時(shí)候大致看過(guò),也寫(xiě)在了學(xué)習(xí)教程里“非正式協(xié)議概念其實(shí)就是類(lèi)別的另一種表達(dá)方式“這里有一些你可能希望實(shí)現(xiàn)的方法,你可以使用他們更好的完成工作”。這個(gè)意思是,這些是可選的。比如我門(mén)要一個(gè)更好的方法,我們就會(huì)申明一個(gè)這樣的類(lèi)別去實(shí)現(xiàn)。然后你在后期可以直接使用這些更好的方法。這么看,總覺(jué)得類(lèi)別這玩意兒有點(diǎn)像協(xié)議的可選協(xié)議。現(xiàn)在來(lái)看,其實(shí)protocal已經(jīng)開(kāi)始對(duì)兩者都統(tǒng)一和規(guī)范起來(lái)操作,因?yàn)橘Y料中說(shuō)“非正式協(xié)議使用interface修飾“,現(xiàn)在我們看到協(xié)議中兩個(gè)修飾詞:“必須實(shí)現(xiàn)(requied)”和“可選實(shí)現(xiàn)(optional)”。1)obj-c的編譯器處理后綴為m的文件時(shí),可以識(shí)別

26、obj-c和c的代碼,處理mm文件可以識(shí)別obj-c,c,c+代碼,但cpp文件必須只能用c/c+代碼,而且cpp文件include的頭文件中,也不能出現(xiàn)obj- c的代碼,因?yàn)閏pp只是cpp2) 在mm文件中混用cpp直接使用即可,所以obj-c混cpp不是問(wèn)題3)在cpp中混用obj- c其實(shí)就是使用obj-c編寫(xiě)的模塊是我們想要的。如果模塊以類(lèi)實(shí)現(xiàn),那么要按照cppclass的標(biāo)準(zhǔn)寫(xiě)類(lèi)的定義,頭文件中不能出現(xiàn)obj-c的東西,包括#import cocoa的。實(shí)現(xiàn)文件中,即類(lèi)的實(shí)現(xiàn)代碼中可以使用obj-c的東西,可以import,只是后綴是mm。如果模塊以函數(shù)實(shí)現(xiàn),那么頭文件要按 c的

27、格式聲明函數(shù),實(shí)現(xiàn)文件中,c+函數(shù)內(nèi)部可以用obj-c,但后綴還是mm或m??偨Y(jié):只要cpp文件和cpp include的文件中不包含obj-c的東西就可以用了,cpp混用obj-c的關(guān)鍵是使用接口,而不能直接使用實(shí)現(xiàn)代碼,實(shí)際上cpp混用的是obj-c編譯后的o文件,這個(gè)東西其實(shí)是無(wú)差別的,所以可以用。obj-c的編譯器支持cpp.使用HTTPS,加時(shí)間戳1分鐘內(nèi)不允許重復(fù)發(fā)送, 短信驗(yàn)證, 判斷手機(jī)號(hào)段保證號(hào)碼正確,不是虛擬號(hào)嗎. 保證郵箱,手機(jī)號(hào)等設(shè)備的標(biāo)識(shí)唯一,并且在輸入驗(yàn)證時(shí)判斷,如果多次驗(yàn)證碼錯(cuò)誤.可以鎖定賬號(hào)或著手機(jī)注冊(cè).在有指針的情況下,淺拷貝只是增加了一個(gè)指針指向已經(jīng)存在的內(nèi)

28、存,而深拷貝就是增加一個(gè)指針并且申請(qǐng)一個(gè)新的內(nèi)存,使這個(gè)增加的指針指向這個(gè)新的內(nèi)存,采用深拷貝的情況下,釋放內(nèi)存的時(shí)候就不會(huì)出現(xiàn)在淺拷貝時(shí)重復(fù)釋放同一內(nèi)存的錯(cuò)誤二者都屬于一種數(shù)據(jù)結(jié)構(gòu)。從邏輯結(jié)構(gòu)來(lái)看 1. 數(shù)組必須事先定義固定的長(zhǎng)度(元素個(gè)數(shù)),不能適應(yīng)數(shù)據(jù)動(dòng)態(tài)地增減的情況。當(dāng)數(shù)據(jù)增加時(shí),可能超出原先定義的元素個(gè)數(shù);當(dāng)數(shù)據(jù)減少時(shí),造成內(nèi)存浪費(fèi);數(shù)組可以根據(jù)下標(biāo)直接存取。 2. 鏈表動(dòng)態(tài)地進(jìn)行存儲(chǔ)分配,可以適應(yīng)數(shù)據(jù)動(dòng)態(tài)地增減的情況,且可以方便地插入、刪除數(shù)據(jù)項(xiàng)。(數(shù)組中插入、刪除數(shù)據(jù)項(xiàng)時(shí),需要移動(dòng)其它數(shù)據(jù)項(xiàng),非常繁瑣)鏈表必須根據(jù)next指針找到下一個(gè)元素。從內(nèi)存存儲(chǔ)來(lái)看 1. (靜態(tài))數(shù)組從棧

29、中分配空間, 對(duì)于程序員方便快速,但是自由度小 2. 鏈表從堆中分配空間, 自由度大但是申請(qǐng)管理比較麻煩。從上面的比較可以看出,如果需要快速訪問(wèn)數(shù)據(jù),很少或不插入和刪除元素,就應(yīng)該用數(shù)組;相反, 如果需要經(jīng)常插入和刪除元素就需要用鏈表數(shù)據(jù)結(jié)構(gòu)了。多繼承在這里是用protocol 委托代理 來(lái)實(shí)現(xiàn)的。不用去考慮繁瑣的多繼承 ,虛基類(lèi)的概念.ood的多態(tài)特性 在 obj-c 中通過(guò)委托來(lái)實(shí)現(xiàn).mminterface someClassgitrequired-fno-objc-arcSDWebImage http:/ http:/ 在定義一個(gè)count 設(shè)置一個(gè)timer 每次減少一秒 把count

30、- 再把count的值拼接到label上 當(dāng)count = 0 的時(shí)候在顯示驗(yàn)證碼輸入下載SDK,申請(qǐng)賬號(hào)、交費(fèi)、加入客服群,按照SDK進(jìn)行集成 百度錢(qián)包、微信支付、支付寶、銀聯(lián)1 1月月6 6日日之之前前在iOS 4 與 MacOS X 10.6以后,Operation Queue的底層實(shí)現(xiàn)都是用GCD來(lái)實(shí)現(xiàn)的。GCD是底層的C語(yǔ)言構(gòu)成的API,而NSOperationQueue及相關(guān)對(duì)象是Objc的對(duì)象。在GCD中,在隊(duì)列中執(zhí)行的是由block構(gòu)成的任務(wù),這是一個(gè)輕量級(jí)的數(shù)據(jù)結(jié)構(gòu);而Operation作為一個(gè)對(duì)象,為我們提供了更多的選擇;在NSOperationQueue中,我們可以隨時(shí)取消已經(jīng)設(shè)定要準(zhǔn)備執(zhí)行的任務(wù)(當(dāng)然,已經(jīng)開(kāi)始的任務(wù)就無(wú)法阻止了),而GCD沒(méi)法停止已經(jīng)加入queue的block(其實(shí)是有的,但需要許多復(fù)雜的代碼);NSOperation能夠方便地設(shè)置依賴(lài)關(guān)系,我們可以讓一個(gè)Operation依賴(lài)于另一個(gè)Operation,這樣的話盡管兩個(gè)Operation處于同一個(gè)并行隊(duì)列中,但前者會(huì)直到后者執(zhí)行完畢后再執(zhí)行;我們能將KVO應(yīng)用在NSOperation中,可以監(jiān)聽(tīng)一個(gè)Operation是否完成或取消,這樣子能比GCD更加

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論