1.http和https有什么區(qū)別长已?
(1)HTTP:超文本傳輸協(xié)議,是短連接昼牛,是客戶端主動發(fā)送請求术瓮,服務(wù)器作出相應(yīng),服務(wù)器響應(yīng)之后贰健,連接斷開胞四。HTTP是一個屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議。HTTP有兩類報文:請求報文和響應(yīng)報文伶椿。
(2)HTTPS:安全超文本傳輸協(xié)議辜伟,他是一個安全通信通道,它基于HTTP開發(fā)脊另,用于在客戶計算機和服務(wù)器之間交換信息导狡。它使用安全套接字層(SSI)進行信息交換,簡單來說它是HTTP的安全版尝蠕。
2.長連接和短連接烘豌,闡述一下。
長連接:一旦和服務(wù)器建立連接之后,只要不主動退出,或是服務(wù)器不把你踢下線,這個連接就一直存在看彼,指在一個連接上可以連續(xù)發(fā)送多個數(shù)據(jù)包廊佩,在連接保持期間,如果沒有數(shù)據(jù)包發(fā)送靖榕,需要雙方發(fā)鏈路檢測包标锄。
好處:因為已經(jīng)建立了連接,并且只需要建立一次,下次就直接發(fā)送請求,特別適合即時通信
缺點:一直占著服務(wù)器的連接資源,讓別的客戶端,無法訪問
短連接:和服務(wù)器建立交互之后,會主動斷開連接,這個叫做短連接 ,指通訊雙方有數(shù)據(jù)交互時茁计,就建立一個連接料皇,數(shù)據(jù)發(fā)送完成后,則斷開此連接星压,即每次連接只完成一項業(yè)務(wù)的發(fā)送践剂。
優(yōu)點:不需要長期占用通道,對于業(yè)務(wù)頻率不高的場合娜膘,能節(jié)省通道的使用逊脯。可以讓更多的客戶端.連接到服務(wù)器,然后獲取資源
缺點:需要在每次發(fā)送業(yè)務(wù)時竣贪,都要建立一次連接军洼,連接建立的過程開銷大巩螃。每個客戶端每一次都需要3次握手建立連接,這樣的需要時間
3.XMPP協(xié)議
XMPP是一種基于標準通用標記語言的子集XML的協(xié)議,它繼承了在XML環(huán)境中靈活的發(fā)展性匕争。因此避乏,基于XMPP的應(yīng)用具有超強的可擴展性。經(jīng)過擴展以后的XMPP可以通過發(fā)送擴展的信息來處理用戶的需求甘桑,以及在XMPP的頂端建立如內(nèi)容發(fā)布系統(tǒng)和基于地址的服務(wù)等應(yīng)用程 序拍皮。而且,XMPP包含了針對服務(wù)器端的軟件協(xié)議扇住,使之能與另一個進行通話春缕,這使得開發(fā)者更容易建立客戶應(yīng)用程序或給一個配好系統(tǒng)添加功能盗胀。
4.Sokect方面的環(huán)信方面的
socket起源于Unix艘蹋,而Unix/Linux基本哲學之一就是“一切皆文件”,都可以用“打開open–>讀寫write/read–>關(guān)閉close”模式來操作票灰。我的理解就是Socket就是該模式的一個實現(xiàn)女阀,socket即是一種特殊的文件,一些socket函數(shù)就是對其進行的操作(讀/寫IO屑迂、打開浸策、關(guān)閉)
5.Userdeafault和plist有什么區(qū)別?
起都存儲在一個plist惹盼。
Plist和NSUserDefaults基本上是相同的然而NSUserDefaults只應(yīng)該用于保存首選項和不大的數(shù)據(jù)量
6.查詢數(shù)據(jù)庫中前十個數(shù)據(jù)怎么寫庸汗?
select top 20 *
from tbl
7.數(shù)據(jù)庫(問題很大 很多 要好好搞)
8.如果后期需要增加數(shù)據(jù)庫中的字段怎么實現(xiàn),如果不使用CoreData呢手报?
3>修改表字段
ALETER TABLE表名RENAME COLUMN舊字段名TO新字段名
9.SQLite數(shù)據(jù)存儲是怎么用蚯舱?
1>增加SQLite動態(tài)庫:libsqlite3.dylib
2>導(dǎo)入主頭文件:#import
3>利用C語言函數(shù)創(chuàng)建/打開數(shù)據(jù)庫,編寫SQL語句
10.簡單描述下客戶端的緩存機制?
1.緩存可以分為:內(nèi)存數(shù)據(jù)緩存掩蛤、數(shù)據(jù)庫緩存枉昏、文件緩存
2.每次想獲取數(shù)據(jù)的時候
1>先檢測內(nèi)存中有無緩存
2>再檢測本地有無緩存(數(shù)據(jù)庫/文件)
3>最終發(fā)送網(wǎng)絡(luò)請求
4>將服務(wù)器返回的網(wǎng)絡(luò)數(shù)據(jù)進行緩存(內(nèi)存、數(shù)據(jù)庫揍鸟、文件)以便下次讀取
11.Md5兄裂、aes阳藻、RSA加密本質(zhì)區(qū)別是什么匾南?
Md5是不可逆的aes和RSA是可逆的
12.MVC和MVVM午衰,簡述一下
任何一個正經(jīng)開發(fā)過一陣子軟件的人都熟悉MVC臊岸,它意思是Model View Controller,是一個在復(fù)雜應(yīng)用設(shè)計中組織代碼的公認模式.它也被證實在iOS開發(fā)中有著第二種含義: Massive View Controller(重量級視圖控制器)灯帮。它讓許多程序員絞盡腦汁如何去使代碼被解耦和組織地讓人滿意.
MVVM在概念上是真正將頁面與數(shù)據(jù)邏輯分離的模式钟哥,它把數(shù)據(jù)綁定工作放到一個JS里去實現(xiàn)腻贰,而這個JS文件的主要功能是完成數(shù)據(jù)的綁定播演,即把model綁定到UI的元素上伴奥。
13.Assign和weak引用計數(shù)器加不加1拾徙,strong和retain引用計數(shù)器加不加1尼啡?
Assign和weak不加1,strong和retain加1.
14.Assign和weak修飾Delegate的時候古徒,有什么區(qū)別?
Assign修飾時疹吃,出作用域的時候Delegate不會釋放,容易野指針腔呜。Weak修飾時核畴,出作用域之后Delegate將會釋放谤草。
15.Delegate會出現(xiàn)找不到方法的錯誤丑孩,不想實現(xiàn)方法又不想讓其報錯冀宴,應(yīng)該怎么辦温学?
將該方法從@required放入@optional中
16.category和extension
Category(類別):
Category在iOS開發(fā)中使用非常頻繁,尤其是在為系統(tǒng)類進行拓展時枫浙,可以不用繼承系統(tǒng)類,直接給系統(tǒng)類添加方法箩帚,最大程度的體現(xiàn)了OC的動態(tài)語言特性。
通常的命名方式是:Category擴展的類名+Category
name黄痪;
局限性:
1、無法向類中添加新的實例變量桅打,類別沒有位置容納實例變量挺尾;
2、名稱沖突魂挂,即當類別中的方法與原始類方法名稱沖突時涂召,類別具有更高的優(yōu)先級,類別方法將完全取代初始方法果正。
類別的作用:
1炎码、擴展一個其他實施者定義的類盟迟,可以為某個類增加方法,增加的方法會被子類繼承潦闲,而且在運行時也不會和原始的方法有任何不同队萤;
2、作為子類的一個替代方法矫钓,不需要定義一個子類來擴展已有的類要尔,通過Category可以直接為類添加方法;
3新娜、把實現(xiàn)一個新類的方法分布在多個源文件里赵辕,可以把一個很大的類的方法分組到幾個Category里,然后把每個Category放在自己的文件里概龄,Category在很多方面對開發(fā)過程都是有幫助的:
①提供一個簡單地方式組合相關(guān)的方法还惠。被定義在不同的類里的相似的方法可以被保存在同一個源文件里;
②當一個類是由多個開發(fā)者共同定義的時候私杜,可以簡化大類的管理蚕键;
③為一個非常大的類的增量編譯提供方便;
④提高常用方法的本地參考衰粹;
⑤可以根據(jù)不同版本的程序配置不同的類锣光,而無需為不同版本保持相同的源代碼;
4铝耻、可以用來聲明非正式協(xié)議誊爹;
注意:
1、Category的方法不一定非要在implementation中實現(xiàn)瓢捉,也可以在其他位置實現(xiàn)频丘,但是當調(diào)用Category的方法時,依據(jù)繼承樹沒有找到該方法的實現(xiàn)泡态,程序會崩潰搂漠。
2、Category理論上不能添加變量某弦,但是可以使用@dynamic來彌補這種不足桐汤。
Extension(擴展):
1、常被稱為是匿名的Category
2刀崖、用于給類添加新方法惊科,但只作用于原始類,不作用于subclass
3亮钦、只能對有implementation源代碼的類寫Extension馆截,對于沒有implementation源代碼的類,比如framework class,是不可以的
4蜡娶、可以給原始類添加新方法混卵,以及新屬性
區(qū)別:
1、形式上來看窖张,Extension是匿名的Category
2幕随、Extension里聲明的方法需要在mainimplementation中實現(xiàn),Category不強制要求
3宿接、Extension可以添加屬性(變量)赘淮,Category不可以
17.category分類中能否添加屬性,為什么睦霎,應(yīng)該怎么添加梢卸,代碼是什么?
用runtime實現(xiàn)
objc_setAssociatedObject(<#id
object#>, <#const void *key#>, <#id value#>,
<#objc_AssociationPolicy policy#>)
18.簡述ViewController的生命周期副女,按順序蛤高。
各方法執(zhí)行流程如下:
init—>loadView—>viewDidLoad—>viewWillApper—>viewDidApper—>viewWillDisapper—>viewDidDisapper—>viewWillUnload->viewDidUnload—>dealloc
19.ViewWillAppear和ViewDidLoad中加通知,在哪個方法中移除碑幅?
將移除通知的代碼放到dealloc方法中
dealloc方法是在控制器銷毀之時調(diào)用的戴陡。這個時候移除通知而不是在viewWillDisappear:方法中移除可以有效避免上述的問題
20.ViewController1和ViewController2,當V1跳到V2時沟涨,相對于V1來說ViewController的生命周期執(zhí)行哪些方法恤批?相對于V2來說ViewController的生命周期執(zhí)行哪些方法?
v1
viewWillDisapper—>viewDidDisapper—>viewWillUnload->viewDidUnload—>dealloc
v2
init—>loadView—>viewDidLoad—>viewWillApper—>viewDidApper
21.簡述oc的消息轉(zhuǎn)發(fā)機制拷窜?
1开皿、動態(tài)方法解析
2、備用接受者
3篮昧、完整轉(zhuǎn)發(fā)
22.Objc對nil對象發(fā)消息會導(dǎo)致什么?
在Objective-C中向nil發(fā)送消息是完全有效的笋妥,只是在運行時不會有任何作用
23.事件的傳遞順序
觸摸事件的傳遞是從父控件傳遞到子控件
也就是UIApplication->window->尋找處理事件最合適的view
24.一個界面有兩個滑動的時間懊昨,你是怎么處理滑動事件沖突的。
25.什么是block春宣?block實現(xiàn)原理酵颁?
block是一個特殊的OC對象,它建立在棧上,而不是堆上,這么做一個是為性能考慮,還有就是方便訪問局部變量。默認情況下block使用到的局部變量都會被復(fù)制,而不是保留月帝。所以它無法改變局部變量的值躏惋。如果在變量面前加上__block,那么編譯器回去不會復(fù)制變量,而是去找變量的地址,通過地址來訪問變量,實際上就是直接操作變量。另外block是在棧上分配的,所以一旦離開作用域,就會釋放,因此如果你要把快用在別的地方,必須要復(fù)制一份嚷辅。block是不能保留的, retain對塊沒有意義簿姨。
26.Int a = 0;block{ a = 10; }錯沒錯?應(yīng)該怎么改扁位?
修飾int a = 0的時候加上__block
27.block如果出現(xiàn)循環(huán)引用怎么辦准潭?簡述循環(huán)引用怎么造成的?
block內(nèi)部有一個weakself,weakself本身是一個弱引用,由于對弱引用無法強持有,所以, block并沒有強持有self,當self想要釋放的時候,已經(jīng)沒有其他強引用了,就可以釋放.self被釋放,就沒有變量強持有block,block也會釋放.這樣,循環(huán)引用就不存在了
28.地圖的浮層怎么操作的域仇,地理編碼 和 反地理編碼自定義大頭針(百度地圖)刑然?
29.支付寶的流程?微信支付的流程暇务?內(nèi)購的流程泼掠?
支付寶快捷支付的主要步驟:
先與支付寶簽約,獲得商戶ID(partner)和賬號ID(seller);
下載相應(yīng)的公鑰私鑰文件(加密簽名用);
下載支付寶SDK;
生成訂單信息;
調(diào)用支付寶客戶端垦细,由支付寶客戶端跟支付寶安全服務(wù)器打交道;
支付完畢后返回支付結(jié)果給商戶客戶端和服務(wù)择镇。
而iOS客戶端需要做的是:
調(diào)用支付寶支付接口;
處理支付寶返回的支付結(jié)果蝠检。
在調(diào)用支付寶支付接口前沐鼠,還需要先生成一個訂單,下載的支付寶文檔中描述時叹谁,是將這步也放在客戶端來做了饲梭,但也可以在服務(wù)器端生成這個訂單(支付寶會在支付成功后通知服務(wù)器端,所以在服務(wù)器端生成訂單的話焰檩,開發(fā)者掌握所有訂單憔涉,而且也會更安全)。
生成訂單(可以在iOS客戶端內(nèi)生成析苫,也可以在服務(wù)器端生成)兜叨;
調(diào)用支付寶支付接口,發(fā)送訂單衩侥;
處理支付寶返回的支付結(jié)果国旷。
支付寶支付的安全問題,需要在生成訂單和處理支付結(jié)果的時候做一個安全性校驗:即生成訂單時對數(shù)據(jù)簽名茫死,收到支付結(jié)果時對數(shù)據(jù)進行簽名驗證跪但,以檢驗數(shù)據(jù)是否被篡改過(支付寶目前只支持采用RSA加密方式做簽名驗證)。簡單地說峦萎,就是在生產(chǎn)訂單時屡久,需要使用私鑰生成簽名值;在處理返回的支付結(jié)果時爱榔,需要使用公鑰驗證返回結(jié)果是否被篡改
30.簡述一下你項目中的封裝思想被环。
將有相同屬性的成員放入一個類中,將其內(nèi)部屬性屏蔽起來详幽,控制器只需要用他而不需要知道他內(nèi)部的成員屬性
31.你都自定義過什么控件筛欢?
自己發(fā)揮
32.Runtime簡述?
RunTime簡稱運行時。就是系統(tǒng)在運行的時候的一些機制悴能,其中最主要的是消息機制揣钦。對于C語言,函數(shù)的調(diào)用在編譯的時候會決定調(diào)用哪個函數(shù)(C語言的函數(shù)調(diào)用請看這里)漠酿。編譯完成之后直接順序執(zhí)行冯凹,無任何二義性。OC的函數(shù)調(diào)用成為消息發(fā)送炒嘲。屬于動態(tài)調(diào)用過程宇姚。在編譯的時候并不能決定真正調(diào)用哪個函數(shù)(事實證明,在編譯階段夫凸,OC可以調(diào)用任何函數(shù)浑劳,即使這個函數(shù)并未實現(xiàn),只要申明過就不會報錯夭拌。而C語言在編譯階段就會報錯)魔熏。只有在真正運行的時候才會根據(jù)函數(shù)的名稱找到對應(yīng)的函數(shù)來調(diào)用。
33.runtime實現(xiàn)的機制是什么,怎么用鸽扁,一般用于干嘛.你還能記得你所使用的相關(guān)的頭文件或者某些方法的名稱嗎
太多蒜绽。參考這個
http://www.reibang.com/p/29d674eec06e
34.Runloop簡述,NSRunLoop的實現(xiàn)機制,及在多線程中如何使用桶现。
Run loops是線程相關(guān)的的基礎(chǔ)框架的一部分躲雅。一個run loop就是一個事件處理 的循環(huán),用來不停的調(diào)度工作以及處理輸入事件。
使用run loop的目的是讓你的線程在有工作的時候忙于工作,而沒工作的時候處于休眠狀態(tài)骡和。
Runloop還可以在loop在循環(huán)中的同時響應(yīng)其他輸入源相赁,比如界面控件的按鈕,手勢等慰于。
線程和RunLoop之間是一一對應(yīng)的钮科,其關(guān)系是保存在一個全局的Dictionary里。線程剛創(chuàng)建時并沒有RunLoop婆赠,如果你不主動獲取跺嗽,那它一直都不會有。RunLoop的創(chuàng)建是發(fā)生在第一次獲取時页藻,RunLoop的銷毀是發(fā)生在線程結(jié)束時。你只能在一個線程的內(nèi)部獲取其RunLoop(主線程除外)植兰。
35.scrollView滑動時間和定時器的沖突怎么解決份帐?
NSTimer對象以NSDefaultRunLoopMode(kCFRunLoopDefaultMode)添加到主運行循環(huán)中的時候, ScrollView滾動過程中會因為mode的切換,而導(dǎo)致NSTimer將不再被調(diào)度楣导。
36.多線程有哪幾種废境,優(yōu)缺點是什么?
NSThread:
優(yōu)點:NSThread比其他兩個輕量級
缺點:需要自己管理線程的生命周期,線程同步噩凹。線程同步對數(shù)據(jù)的加鎖會有一定的系統(tǒng)開銷
Cocoa operation
優(yōu)點:不需要關(guān)心線程管理巴元,數(shù)據(jù)同步的事情,可以把精力放在自己需要執(zhí)行的操作上驮宴。
Cocoa operation相關(guān)的類是NSOperation逮刨,NSOperationQueue。NSOperation是個抽象類堵泽,使用它必須用它的子類修己,可以實現(xiàn)它或者使用它定義好的兩個子類:NSInvocationOperation和NSBlockOperation。創(chuàng)建NSOperation子類的對象迎罗,把對象添加到NSOperationQueue隊列里執(zhí)行睬愤。
GCD
Grand Central Dispatch (GCD)是Apple開發(fā)的一個多核編程的解決方法。在iOS4.0開始之后才能使用纹安。GCD是一個替代諸如NSThread, NSOperationQueue, NSInvocationOperation等技術(shù)的很高效和強大的技術(shù)∮热瑁現(xiàn)在的iOS系統(tǒng)都升級到6了,所以不用擔心該技術(shù)不能使用厢岂。
37.@property都為我們產(chǎn)生出什么東西光督?并且怎么能只生成getter方法不生成setter方法?
生成__實例變量咪笑,setter方法可帽,getter方法
添加一個只讀屬性readonly
38.@synthesize和@dynamic分別有什么作用?
@synthesize的語義是如果你沒有手動實現(xiàn)setter方法和getter方法窗怒,那么編譯器會自動為你加上這兩個方法映跟。
@dynamic告訴編譯器:屬性的setter與getter方法由用戶自己實現(xiàn),不自動生成扬虚。(當然對于readonly的屬性只需提供getter即可)努隙。假如一個屬性被聲明為@dynamic var,然后你沒有提供@setter方法和@getter方法辜昵,編譯的時候沒問題荸镊,但是當程序運行到instance.var =
someVar,由于缺setter方法會導(dǎo)致程序崩潰堪置;或者當運行到someVar = var時躬存,由于缺getter方法同樣會導(dǎo)致崩潰。編譯時沒問題舀锨,運行時才執(zhí)行相應(yīng)的方法岭洲,這就是所謂的動態(tài)綁定
39.哪些類型使用copy,不用strong坎匿?如果NSString使用了strong不用copy會造成什么問題盾剩?
當源字符串是NSString時雷激,由于字符串是不可變的,所以告私,不管是strong還是copy屬性的對象屎暇,都是指向源對象,copy操作只是做了次淺拷貝驻粟。
當源字符串是NSMutableString時根悼,strong屬性只是增加了源字符串的引用計數(shù),而copy屬性則是對源字符串做了次深拷貝格嗅,產(chǎn)生一個新的對象番挺,且copy屬性對象指向這個新的對象。另外需要注意的是屯掖,這個copy屬性對象的類型始終是NSString玄柏,而不是NSMutableString,因此其是不可變的贴铜。
這里還有一個性能問題粪摘,即在源字符串是NSMutableString,strong是單純的增加對象的引用計數(shù)绍坝,而copy操作是執(zhí)行了一次深拷貝徘意,所以性能上會有所差異。而如果源字符串是NSString時轩褐,則沒有這個問題椎咧。
所以,在聲明NSString屬性時把介,到底是選擇strong還是copy勤讽,可以根據(jù)實際情況來定。不過拗踢,一般我們將對象聲明為NSString時脚牍,都不希望它改變,所以大多數(shù)情況下巢墅,我們建議用copy诸狭,以免因可變字符串的修改導(dǎo)致的一些非預(yù)期問題
40.iOS沙盒目錄的結(jié)構(gòu)是怎么樣的?APP Bundle里面都有什么君纫?
(1)默認情況下驯遇,每個沙盒含有3個文件夾:Documents, Library和tmp。因為應(yīng)用的沙盒機制蓄髓,應(yīng)用只能在幾個目錄下讀寫文件
Documents:蘋果建議將程序中建立的或在程序中瀏覽到的文件數(shù)據(jù)保存在該目錄下妹懒,iTunes備份和恢復(fù)的時候會包括此目錄
Library:存儲程序的默認設(shè)置或其它狀態(tài)信息;
Library/Caches:存放緩存文件双吆,iTunes不會備份此目錄眨唬,此目錄下文件不會在應(yīng)用退出刪除
tmp:提供一個即時創(chuàng)建臨時文件的地方。
(2)
1好乐、名稱
在用戶從App Store發(fā)現(xiàn)你的App Bundles過程中匾竿,App Bundles的名稱扮演了一個關(guān)鍵的角色。開發(fā)者需要選擇一個能精準反應(yīng)App
Bundles內(nèi)容的名字(比如Music Maker
Bundle或者Winter Sports Pack)蔚万。盡量不要使用“Editor’s Choice”岭妖、“Essentials”或者“Collection”這類詞罪郊。
尤其需要注意App Bundles的名稱在iPad炕矮、iPhone以及iPod touch的App Store中的展示。過長的名字會被系統(tǒng)截斷涧衙,用戶也不會看到所有的字符淮蜈。推薦將App Bundles的名字限定在23個字符以內(nèi)斋攀,以便能在每臺設(shè)備上都能最佳展示。
2梧田、截圖
每個bundled
app的第一張截圖會展示在App Bundle的產(chǎn)品頁面淳蔼。最好的情況是每張截圖都能清晰地傳達應(yīng)用程序的精髓。
3裁眯、關(guān)鍵字
iTunes
Connect會編譯你為bundled apps鍵入的關(guān)鍵字鹉梨,并在你的App Bundle元數(shù)據(jù)中使用它們。
4穿稳、Icons
App
Bundles的icon由包中頭四個app組成中存皂。開發(fā)者可以選擇突出最能引起用戶興趣的四個app,所以要考慮放置最受歡迎的應(yīng)用程序逢艘。
要確保App
Bundle中每個應(yīng)用程序的icon是與眾不同的旦袋,并集中于一個最引人注目的圖像上。文本埋虹、品牌以及其他小的元素可能不能很好地展示在尺寸縮小的bundle icon上猜憎。
5、Bundle描述
App
Bundle的描述應(yīng)當是簡明的搔课、吸引人的胰柑。最開始的那幾句描述最重要,這些內(nèi)容需要用戶一眼就能看到爬泥,無需點擊“…
more”柬讨。理想的描述應(yīng)當是一個簡潔的引人注目的段落,然后是主要功能列表項目袍啡。
關(guān)注App
Bundle的各個方面都將會促使用戶下載你的應(yīng)用(還包括其他方面踩官,比如App Bundle中應(yīng)用程序的質(zhì)量、為什么要創(chuàng)建一個Bundle app以及你所提供的折扣價格)境输。