2021 iOS高級面試題及答案

1.UITableview的優(yōu)化方法(緩存高度,異步繪制凯旋,減少層級呀潭,hide,避免離屏渲染)

緩存高度:當(dāng)我們創(chuàng)建frame模型的時候至非,計算出來cell的高度的時候钠署,我們可以將cell的高度緩存到字典里面,以cell的indexpathIdentifier作為為key荒椭。

NSString *key = [[HeightCache shareHeightCache] makeKeyWithIdentifier:@"YwywProductGradeCell" indexPath:indexPath];
if ([[HeightCache shareHeightCache] existInCacheByKey:key]) {
    return [[HeightCache shareHeightCache] heightFromCacheWithKey:key];
}else{
    YwywProductGradeModelFrame *modelFrame = self.gradeArray[indexPath.row];
    [[HeightCache shareHeightCache] cacheHieght:modelFrame.cellHight key:key];
    return modelFrame.cellHight;
}

異步繪制谐鼎、減少層級:目前還不是很清楚
hide:個人理解應(yīng)該是hidden吧,把可能會用到的控件都創(chuàng)建出來戳杀,根據(jù)不同的情況去隱藏或者顯示出來该面。
避免離屏渲染:只要不是同時使用邊框/邊框顏色以及圓角的時候夭苗,都可以使用layer直接設(shè)置。不會造成離屏渲染隔缀。

2.有沒有用過運行時题造,用它都能做什么?(交換方法猾瘸,創(chuàng)建類界赔,給新創(chuàng)建的類增加方法,改變isa指針)

交換方式:一般寫在類的+(void)load方法里面

   /** 獲取原始setBackgroundColor方法 */
Method originalM = class_getInstanceMethod([self class], @selector(setBackgroundColor:));
/** 獲取自定義的pb_setBackgroundColor方法 */
Method exchangeM = class_getInstanceMethod([self class], @selector(pb_setBackgroundColor:));
/** 交換方法 */
method_exchangeImplementations(originalM, exchangeM);

創(chuàng)建類:
Class MyClass = objc_allocateClassPair([NSObject class], "Person", 0);

添加方法
/**參數(shù)一牵触、類名參數(shù)
   二淮悼、SEL 添加的方法名字參數(shù)
    三、IMP指針 (IMP就是Implementation的縮寫揽思,它是指向一個方法實現(xiàn)的指針袜腥,每一個方法都有一個對應(yīng)的IMP)
  參數(shù)四、其中types參數(shù)為"i@:@“钉汗,按順序分別表示:具體類型可參照[官方文檔](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html)i 返回值類型int羹令,若是v則表示void@ 參數(shù)id(self): SEL(_cmd)@ id(str)
  V@:表示返回值是void 帶有SEL參數(shù) (An object (whether statically typed or typed id))
  */
class_addMethod(Person, @selector(addMethodForMyClass:), (IMP)addMethodForMyClass, "V@:");

添加實例變量
/**參數(shù)一、類名參數(shù)
  二损痰、屬性名稱參數(shù)
  三福侈、開辟字節(jié)長度參數(shù)
  四、對其方式參數(shù)
  五卢未、參數(shù)類型 “@” 官方解釋 An object (whether statically typed or typed id) (對象 靜態(tài)類型或者id類型) 具體類型可參照[官方文檔](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html)return: BOOL 是否添加成功
  */
BOOL isSuccess = class_addIvar(Person, "name", sizeof(NSString *), 0, "@");
isSuccess?NSLog(@"添加變量成功"):NSLog(@"添加變量失敗");

3.看過哪些第三方框架的源碼肪凛?都是如何實現(xiàn)的?(如果沒有辽社,問一下多圖下載的設(shè)計)

4.SDWebImage的緩存策略伟墙?

sd加載一張圖片的時候,會先在內(nèi)存里面查找是否有這張圖片爹袁,如果沒有會根據(jù)圖片的md5(url)后的名稱去沙盒里面去尋找远荠,是否有這張圖片矮固,如果沒有會開辟線程去下載失息,下載完畢后加載到imageview上面,并md(url)為名稱緩存到沙盒里面档址。

5.AFN為什么添加一條常駐線程盹兢?

AFN 目的:就是開辟線程請求網(wǎng)絡(luò)數(shù)據(jù)。如果沒有常住線程的話守伸,就會每次請求網(wǎng)絡(luò)就去開辟線程绎秒,完成之后銷毀開辟線程,這樣就造成資源的浪費尼摹,開辟一條常住線程见芹,就可以避免這種浪費剂娄,我們可以在每次的網(wǎng)絡(luò)請求都添加到這條線程。

6.KVO的使用玄呛?實現(xiàn)原理阅懦?(為什么要創(chuàng)建子類來實現(xiàn))

kvo:鍵值觀察,根據(jù)鍵對應(yīng)的值的變化徘铝,來調(diào)用方法耳胎。
注冊觀察者:addObserver:forKeyPath:options:context:
實現(xiàn)觀察者:observeValueForKeyPath:ofObject:change:context:
移除觀察者:removeObserver:forKeyPath:(對象銷毀,必須移除觀察者)
注意
使用kvo監(jiān)聽A對象的時候惕它,監(jiān)聽的本質(zhì)不是這個A對象怕午,而是系統(tǒng)創(chuàng)建的一個中間對象NSKVONotifying_A并繼承A對象,并且A對象的isa指針指向的也不是A的類淹魄,而是這個NSKVONotifying_A對象
kvo詳解
kvo詳解2

7.KVC的使用郁惜?實現(xiàn)原理?(KVC拿到key以后甲锡,是如何賦值的扳炬?知不知道集合操作符,能不能訪問私有屬性搔体,能不能直接訪問_ivar)

kvc:鍵值賦值恨樟,使用最多的即使字典轉(zhuǎn)模型。利用runtime獲取對象的所有成員變量疚俱, 在根據(jù)kvc鍵值賦值劝术,進行字典轉(zhuǎn)模型
setValue: forKey: 只查找本類里面的屬性
setValue: forKeyPath:會查找本類里面屬性,沒有會繼續(xù)查找父類里面屬性呆奕。
kvc詳解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末养晋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子梁钾,更是在濱河造成了極大的恐慌绳泉,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姆泻,死亡現(xiàn)場離奇詭異零酪,居然都是意外死亡,警方通過查閱死者的電腦和手機拇勃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門四苇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人方咆,你說我怎么就攤上這事月腋。” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵榆骚,是天一觀的道長片拍。 經(jīng)常有香客問我,道長妓肢,這世上最難降的妖魔是什么穆碎? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮职恳,結(jié)果婚禮上所禀,老公的妹妹穿的比我還像新娘。我一直安慰自己放钦,他們只是感情好色徘,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著操禀,像睡著了一般褂策。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上颓屑,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天斤寂,我揣著相機與錄音,去河邊找鬼揪惦。 笑死遍搞,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的器腋。 我是一名探鬼主播溪猿,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼纫塌!你這毒婦竟也來了诊县?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤措左,失蹤者是張志新(化名)和其女友劉穎依痊,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怎披,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡胸嘁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了钳枕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缴渊。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鱼炒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蝌借,我是刑警寧澤昔瞧,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布指蚁,位于F島的核電站,受9級特大地震影響自晰,放射性物質(zhì)發(fā)生泄漏凝化。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一酬荞、第九天 我趴在偏房一處隱蔽的房頂上張望搓劫。 院中可真熱鬧,春花似錦混巧、人聲如沸枪向。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秘蛔。三九已至,卻和暖如春傍衡,著一層夾襖步出監(jiān)牢的瞬間深员,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工蛙埂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留倦畅,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓绣的,卻偏偏與公主長得像滔迈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子被辑,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 最近準(zhǔn)備復(fù)習(xí)一下面試題燎悍,看到了J_Knight_在18年的出一套 iOS 高級面試題嘗試著回答一下題目,由于水平有...
    lkkwxy閱讀 5,472評論 0 24
  • 1.為什么說Objective-C是一門動態(tài)的語言盼理? object-c類的類型和數(shù)據(jù)變量的類型都是在運行是確定的谈山,...
    Amanda_Lhy閱讀 1,248評論 0 31
  • 點贊再看,養(yǎng)成習(xí)慣宏怔,白嫖不好奏路,歡迎大家關(guān)注我面試小專欄 : iOS中高級進階之路 有我準(zhǔn)備的一線大廠面試資料和簡歷...
    iOS弗森科閱讀 4,307評論 1 35
  • Socket:http://www.mamicode.com/info-detail-877996.html We...
    多情刀客無情刀閱讀 3,966評論 1 18
  • 基礎(chǔ) 1.為什么說Objective-C是一門動態(tài)的語言? 所謂的動態(tài)類型語言臊诊,意思就是類型的檢查是在運行時做的鸽粉。...
    陽明先生_X自主閱讀 1,014評論 0 17