生存不易蜗细,為了生活裆操,為了money怒详,自己必須強大起來炉媒。最近,馬上會迎來自己的面試高峰期昆烁,自己搜集了一些非常容易被面試官提及的iOS基礎(chǔ)面試題吊骤,特總結(jié)歸納并自己湊不要臉的回答一下(排序不分先后以及重要程度)。
Here we go!?
- TCP静尼、UDP協(xié)議和區(qū)別白粉?
TCP (Transmission Control Protocal, 傳輸控制協(xié)議):提供的是面向連接、可靠的字節(jié)流服務(wù)鼠渺。當(dāng)客戶Client和服務(wù)器Server彼此交換數(shù)據(jù)前鸭巴,必須在雙方之間建立一個TCP連接,之后才可以傳輸數(shù)據(jù)拦盹。
UDP (User Data Protocal, 用戶數(shù)據(jù)報協(xié)議):是一個簡單的面向數(shù)據(jù)報的運輸層協(xié)議鹃祖。UDP并不可靠,它只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報發(fā)送出去普舆,但是并不能保證到達(dá)目的地恬口。就是說我只管發(fā)校读,至于到不到,那我不能保證祖能。傳輸過程無需建立連接歉秫,數(shù)據(jù)快于TCP。
這里側(cè)重說明一下TCP連接的三次“握手”:
1. 主機A向主機B發(fā)送連接請求數(shù)據(jù)包养铸;
2. 主機B向主機A發(fā)送同意連接和要求同步(一個發(fā)送雁芙、一個接收,協(xié)調(diào)工作)的數(shù)據(jù)包钞螟;
3. 主機A向主機B發(fā)送確認(rèn)同步數(shù)據(jù)包却特;
區(qū)別:
是否面向連接、傳輸是否可靠筛圆、傳輸數(shù)據(jù)量大小裂明、速度快慢
- iOS內(nèi)存管理機制 & ARC? ? ??
說明內(nèi)存管理機制之前太援,先講一個經(jīng)典的內(nèi)存泄露的例子:
1) 一個對象創(chuàng)建并保留計數(shù)器的值為1的對象A闽晦;
2) 對象A創(chuàng)建并保留計數(shù)器的值為1的對象B并將其作為子對象;
3) 對象A創(chuàng)建了對象B提岔,所以對象A擁有一個指向?qū)ο驜的強引用仙蛉;如果對象B有一個指向?qū)ο驛的強引用,那么對象A的保留計數(shù)器的值會增加到2碱蒙;
4) 當(dāng)對象A的擁有者向?qū)ο驛發(fā)送release消息荠瘪,這樣會讓對象A的保留計數(shù)器的值減少到1;
這樣赛惩,由于對象A所創(chuàng)建的對象B的保留計數(shù)器的值仍為1哀墓,所以對象A和B都沒有被釋放掉,造成了內(nèi)存泄露喷兼。
解決辦法:使用弱引用篮绰。
弱引用不會增加保留計數(shù)器的值柑土,因此當(dāng)對象A的擁有者釋放它的時候扶欣,它的保留計數(shù)器的值會變成0,它也會釋放對象B欠动。
歸零弱引用:指向的對象釋放之后勉抓,這些弱引用就會被設(shè)置為零(即nil)贾漏。
__weak NSString *myString;
@property (weak) NSString *myString;
Cocoa的內(nèi)存管理規(guī)則:
- 如果使用new、alloc或copy操作獲得一個對象藕筋,則該對象的保留計數(shù)器的值為1纵散;
- 如果通過其他方法獲得一個對象,則假設(shè)該對象的保留計數(shù)器的值為1,而且已經(jīng)被設(shè)置為自動釋放困食;
- 如果保留了某對象边翁,則必須保持retain方法和release方法的使用次數(shù)相同;
ARC (automatic reference counting) 會在編譯過程中通過插入這些語句來幫組你執(zhí)行保留或釋放操作硕盹。
copy,retain,assign的區(qū)別符匾?
?copy:把原來的對象完整的賦值到另外一地方,重新加載一內(nèi)存區(qū)瘩例,一個地方變了不影響另一個地方的對象啊胶。
?assign:簡單的直接賦值,相當(dāng)于說兩個對象指向同個內(nèi)存區(qū)垛贤,一個地方的變了焰坪,其他的也跟著改變。
?retain:釋放舊的對象聘惦,將舊對象的值賦予輸入對象某饰,再提高輸入對象的索引計數(shù)為1
那上面的是什么意思呢?
copy其實是建立了一個相同的對象,而 retain 不是:
比如一個NSString對象,地址為0×1111善绎,內(nèi)容為@”ABC”黔漂;
copy 到另外一個NSString之 后,地址為0×2222禀酱,內(nèi)容相同炬守,新的對象retain 為 1,舊 有對象沒有變化剂跟;
retain 到另外一個NSString之 后减途,地址相同(建立一個指針,指針拷貝)曹洽,內(nèi)容當(dāng)然相同鳍置,這個對象的 retain 值+1;
assign 地址還是0x1111衣洁,內(nèi)容也還是“ABC”墓捻。
也就是說,retain 是指針拷貝坊夫,copy 是內(nèi)容拷貝。
- KVO撤卢,Noification &Delegate 區(qū)別环凿?
在功能上說,delegate放吩、Notification以及KVO的功能類似智听,都是作用于OC中對象的消息通信。但三者的使用場景是不同的。簡單的說Delegate是一種回掉函數(shù)到推,更多的用在一對一的場合考赛;Notification 用得較少,使用Notification Center莉测,類似廣播方式颜骤,所以更適合一對多的通信;KVO捣卤,key-Value-Observing忍抽,觀察者模式,適用于偵聽另一對象的屬性的變化董朝。
如何選擇KVO鸠项,Noification &Delegate?
請參考這里 IOS 如何選擇delegate子姜、notification祟绊、KVO?