1.微信如何搜索附近人
這塊大致應該是地圖那一塊涉及到的內容
通過網絡或者GPS定位海诲,位置信息不是實時更新的。
通過微信使用的網絡(手機數(shù)據(jù)檩互、wifi連接)或者打開GPS進行定位特幔。
以自己為中心,計算服務器上與自己相近位置的人列出來闸昨。
2.你會如何保存用戶的敏感信息
可以使用keychain保存用戶名和密碼等敏感信息
KeychainItemWrapper和SFHKeychainUtils.
3.最近的ipv6上架的問題蚯斯,以及了解ipv6是什么
首先,ipv6是對ipv4地址空間的擴充饵较。我覺得解決這個方法最簡單粗暴的方法就是在IPV6環(huán)境下拍嵌,使用真機測試測試應用程序。(蘋果反饋的消息里面也給出了解決問題的方法)
4.消息機制底層實現(xiàn)知道嗎循诉?你用它做過什么横辆?
OC的函數(shù)調用被稱為消息發(fā)送。屬于動態(tài)調用過程茄猫。在編譯的時候不能真正決定使用哪個函數(shù)狈蚤。
5.NSOpration相比于GCD有哪些優(yōu)勢
GCD:
1.GCD是IOS4.0的時候退出的,主要是針對多核CPU進行優(yōu)化募疮,是純C語言的技術炫惩。
2.GCD是將任務添加到隊列(主隊列、串行阿浓、并行他嚷、全局隊列)并且以同步異步的方法執(zhí)行任務的函數(shù)
3.GCD所具備NSOpration不具備的功能
(1)一次性執(zhí)行
(2)延遲執(zhí)行
(3)調度組
(4)GCD是嚴格的隊列,是先進先出FIFO
NSOperation:
1.NSOperation是ios2.0之后推出的芭毙,ios4.0之后又對他進行了重寫
2.NSOpration是將操作(異步操作)添加到隊列(并行隊列)就會執(zhí)行指定的函數(shù)
3.NSOopration提供方便的操作
(1)可以設置最大并發(fā)數(shù)
(2)隊列的暫停和繼續(xù)
(3)取消所有操作
(4)指定操作之間的依賴關系筋蓖,可以讓異步任務同步執(zhí)行
(5)可以將KVO加入NSOperation,監(jiān)聽一個Opration是否完成
(6)能夠使同一個隊列中的并行任務區(qū)分先后執(zhí)行
(7)可以繼承NSOpration退敦,添加成員變量與成員方法粘咖,提高代碼質量
6.如何搜集APP異常信息(比如:崩潰、閃退等)
使用@try侈百、catch捕獲異常:
@try {
//可能出現(xiàn)崩潰的代碼
}
@catch (NSException *exception) {
//捕獲到的異常exception
}
@finally {
//結果處理
}
7.UIWebView有哪些性能問題瓮下?有沒有替代的方案
使用UIWebView來顯示圖片和動態(tài)圖翰铡,會占用很多內存,內存占用多了之后就會出現(xiàn)卡頓讽坏。如果播放的圖片比較少占的內存比較小或者比較常用锭魔,可以選擇用imageNamed:方式獲取圖片。
8.了解GCD的信號量機制嗎路呜?能談談你對他的理解么迷捧!
信號量是一個整形值并且具有一個初始計數(shù)值,并且支持兩個操作:信號通知和等待胀葱。當一個信號量被信號通知漠秋,其計數(shù)會被增加。當一個線程在一個信號量上等待時抵屿,線程會被阻塞(如果有必要的話)庆锦,直至計數(shù)器大于零,然后線程會減少這個計數(shù)轧葛。
9.block的底層實現(xiàn)
block的本質是一個指向結構體的指針
運行時機制 比較高級的特性 純C語言
平時寫的OC代碼裝換成C語言運行時的代碼
指令:clang -rewrite-objc main.m(可以打印驗證)
默認情況下肥荔,block都在棧里面的,隨時可能被回收
只對其做一次copy操作 block的內存會在堆里面朝群,不會被釋放
只有copy會產生一個新的內存地址燕耿,所有地址會發(fā)生改變
10.響應鏈底層的理解
時間響應鏈。包括點擊時間姜胖,畫面刷新事件誉帅、運動事件等。在視圖棧內從上至下右莱,或者從下至上傳播蚜锨。可以說點事件的分發(fā)慢蜓,傳遞以及處理亚再。具體可以去看下touch事件這塊。因為問的太抽象化了嚴重懷疑題目越后面就越籠統(tǒng)晨抡》招可以從責任鏈模式,來講通過時間響應鏈處理耘柱,其擁有擴展性如捅。
11.KVO和KVC
KVC:鍵 - 值編碼是一種簡介訪問對象的屬性使用字符串來標識屬性,而不是通過調用存取方法调煎,直接或通過實例變量訪問的機制镜遣。
很多情況下可以簡化程序代碼。apple文檔其實給了一個很好的例子(有興趣自己去看)士袄。
KVO:鍵值觀察機制悲关,他提供了觀察某一屬性變化的方法谎僻,極大簡化了代碼。
具體看到用過的地方就是對于按鈕點擊變化狀態(tài)的監(jiān)控寓辱。
比如自定義一個button
[self addObserver:self forKeyPath:@"highlight" option:0 context:nil];
\\#pragma mark KVO
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"highlighted"]) {
[self setNeedsDisplay];
}
}
對于系統(tǒng)是根據(jù)keypath去取的到相應的值發(fā)生的變化戈稿,理論上來說和KVC機制的道理是一樣的。
對于KVC機制如何通過key尋找到value:
當通過KVC調用對象時讶舰,比如:[self valueForKey:@"someKey"]時,程序會自動通過幾種不同的方式解析這個調用需了。首先查找對象是否帶有 someKey 這個方法跳昼,如果沒找到,會繼續(xù)查找對象是否帶有someKey這個實例變量(iVar)肋乍,如果還沒有找到鹅颊,程序會繼續(xù)試圖調用 - (id) valeForUndefineKey:這個方法。如果這個方法還是沒有實現(xiàn)的話墓造,程序會拋出一個NSUnfinedKeyException的異常錯誤堪伍。 (cocoachina.com注:Key-Value Coding查找方法的時候,不僅僅會查找someKey這個方法觅闽,還會查找getsomeKey這個方法帝雇,前面加一個get,或者someKey以及getsomeKey這幾種形式。同時蛉拙,查找實力變量的時候也會不僅僅查找someKey這個變量尸闸,也會查找_someKey這個變量是否存在。) - 設計valueForUndefinedKey:方法的主要目的是當你使用-(id)valueForKey放阿飛從對象中請求值時孕锄,對象能夠在錯誤發(fā)生前吮廉,有最后的機會相應這個請求,足額楊做有很多好處畸肆,下面的兩個例子說明了這樣做的好處宦芦。 來自cocoa,這個說法應該有道理轴脐。 因為我們知道button是存在一個highlighted實例變量调卑,因此為何上面我們只會add一個相關的keypath就行了,可以按照KVC查找的邏輯理解大咱,就說的過去了令野。
12.lldb(gdb)常用的調試命令
*po:打印對象,會調用對象description方法徽级。是print-object的簡寫
*expr:可以在調試時動態(tài)執(zhí)行指定表達式气破,并將結果打印出來,很有用的命令
*print:也是打印命令餐抢,需要指定類型
*bt:打印調用堆棧现使,是thread backtreace的簡寫低匙,加all可打印出所有thread的堆棧
*br l:是breakpoint list的簡寫