簡述
runtime相關(guān)問題
runtime
是iOS開發(fā)最核心的知識了郁妈,如果下面的問題都解決了,那么對runtime
的理解已經(jīng)很深了绍申。 runtime
已經(jīng)開源了噩咪,這有一份別人調(diào)試好可運(yùn)行的源碼objc-runtime,也可以去官網(wǎng)找objc4
結(jié)構(gòu)模型
- 介紹下runtime的內(nèi)存模型(isa极阅、對象胃碾、類、metaclass涂屁、結(jié)構(gòu)體的存儲(chǔ)信息等)
- 為什么要設(shè)計(jì)metaclass
-
class_copyIvarList
&class_copyPropertyList
區(qū)別 -
class_rw_t
和class_ro_t
的區(qū)別 -
category
如何被加載的,兩個(gè)category的load
方法的加載順序书在,兩個(gè)category的同名方法的加載順序 -
category
&extension
區(qū)別,能給NSObject添加Extension嗎拆又,結(jié)果如何 - 消息轉(zhuǎn)發(fā)機(jī)制儒旬,消息轉(zhuǎn)發(fā)機(jī)制和其他語言的消息機(jī)制優(yōu)劣對比
- 在方法調(diào)用的時(shí)候栏账,
方法查詢-> 動(dòng)態(tài)解析-> 消息轉(zhuǎn)發(fā)
之前做了什么 -
IMP
、SEL
栈源、Method
的區(qū)別和使用場景 -
load
挡爵、initialize
方法的區(qū)別什么?在繼承關(guān)系中他們有什么區(qū)別 - 說說消息轉(zhuǎn)發(fā)機(jī)制的優(yōu)劣
內(nèi)存管理
-
weak
的實(shí)現(xiàn)原理甚垦?SideTable
的結(jié)構(gòu)是什么樣的 - 關(guān)聯(lián)對象的應(yīng)用茶鹃?系統(tǒng)如何實(shí)現(xiàn)關(guān)聯(lián)對象的
- 關(guān)聯(lián)對象的如何進(jìn)行內(nèi)存管理的?關(guān)聯(lián)對象如何實(shí)現(xiàn)weak屬性
-
Autoreleasepool
的原理艰亮?所使用的的數(shù)據(jù)結(jié)構(gòu)是什么 -
ARC
的實(shí)現(xiàn)原理闭翩?ARC
下對retain & release
做了哪些優(yōu)化 -
ARC
下哪些情況會(huì)造成內(nèi)存泄漏
其他
-
Method Swizzle
注意事項(xiàng) - 屬性修飾符
atomic
的內(nèi)部實(shí)現(xiàn)是怎么樣的?能保證線程安全嗎 - iOS 中內(nèi)省的幾個(gè)方法有哪些?內(nèi)部實(shí)現(xiàn)原理是什么
-
class迄埃、objc_getClass疗韵、object_getclass
方法有什么區(qū)別?
NSNotification相關(guān)
- 實(shí)現(xiàn)原理(結(jié)構(gòu)設(shè)計(jì)、通知如何存儲(chǔ)的侄非、
name&observer&SEL
之間的關(guān)系等) - 通知的發(fā)送時(shí)同步的蕉汪,還是異步的
-
NSNotificationCenter
接受消息和發(fā)送消息是在一個(gè)線程里嗎?如何異步發(fā)送消息 -
NSNotificationQueue
是異步還是同步發(fā)送逞怨?在哪個(gè)線程響應(yīng) -
NSNotificationQueue
和runloop
的關(guān)系 - 如何保證通知接收的線程在主線程
- 頁面銷毀時(shí)不移除通知會(huì)崩潰嗎
- 多次添加同一個(gè)通知會(huì)是什么結(jié)果者疤?多次移除通知呢
- 下面的方式能接收到通知嗎?為什么
// 發(fā)送通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNotification:) name:@"TestNotification" object:@1];
// 接收通知
[NSNotificationCenter.defaultCenter postNotificationName:@"TestNotification" object:nil];
Runloop & KVO
runloop
runloop
對于一個(gè)標(biāo)準(zhǔn)的iOS開發(fā)來說都不陌生叠赦,應(yīng)該說熟悉runloop
是標(biāo)配驹马,下面就隨便列幾個(gè)典型問題吧
- app如何接收到觸摸事件的
- 為什么只有主線程的
runloop
是開啟的 - 為什么只在主線程刷新UI
-
PerformSelector
和runloop
的關(guān)系 - 如何使線程保活
KVO
同runloop
一樣眯搭,這也是標(biāo)配的知識點(diǎn)了窥翩,同樣列出幾個(gè)典型問題
- 實(shí)現(xiàn)原理
- 如何手動(dòng)關(guān)閉kvo
- 通過KVC修改屬性會(huì)觸發(fā)KVO么
- 哪些情況下使用kvo會(huì)崩潰,怎么防護(hù)崩潰
- kvo的優(yōu)缺點(diǎn)
Block
-
block
的內(nèi)部實(shí)現(xiàn)鳞仙,結(jié)構(gòu)體是什么樣的 - block是類嗎,有哪些類型
- 一個(gè)
int
變量被__block
修飾與否的區(qū)別笔时?block的變量截獲 -
block
在修改NSMutableArray
棍好,需不需要添加__block
- 怎么進(jìn)行內(nèi)存管理的
-
block
可以用strong
修飾嗎 - 解決循環(huán)引用時(shí)為什么要用
__strong、__weak
修飾 -
block
發(fā)生copy
時(shí)機(jī) -
Block
訪問對象類型的auto變量
時(shí)允耿,在ARC和MRC
下有什么區(qū)別
多線程
主要以GCD為主
-
iOS
開發(fā)中有多少類型的線程借笙?分別對比 -
GCD
有哪些隊(duì)列,默認(rèn)提供哪些隊(duì)列 -
GCD
有哪些方法api -
GCD
主線程 & 主隊(duì)列的關(guān)系 - 如何實(shí)現(xiàn)同步较锡,有多少方式就說多少
-
dispatch_once
實(shí)現(xiàn)原理 - 什么情況下會(huì)死鎖
- 有哪些類型的線程鎖业稼,分別介紹下作用和使用場景
-
NSOperationQueue
中的maxConcurrentOperationCount
默認(rèn)值 -
NSTimer、CADisplayLink蚂蕴、dispatch_source_t
的優(yōu)劣
視圖&圖像相關(guān)
-
AutoLayout
的原理低散,性能如何 -
UIView & CALayer
的區(qū)別 - 事件響應(yīng)鏈
-
drawrect & layoutsubviews
調(diào)用時(shí)機(jī) - UI的刷新原理
- 隱式動(dòng)畫 & 顯示動(dòng)畫區(qū)別
- 什么是離屏渲染
- imageName & imageWithContentsOfFile區(qū)別
- 多個(gè)相同的圖片俯邓,會(huì)重復(fù)加載嗎
- 圖片是什么時(shí)候解碼的,如何優(yōu)化
- 圖片渲染怎么優(yōu)化
- 如果GPU的刷新率超過了iOS屏幕60Hz刷新率是什么現(xiàn)象熔号,怎么解決
性能優(yōu)化
- 如何做啟動(dòng)優(yōu)化稽鞭,如何監(jiān)控
- 如何做卡頓優(yōu)化,如何監(jiān)控
- 如何做耗電優(yōu)化引镊,如何監(jiān)控
- 如何做網(wǎng)絡(luò)優(yōu)化朦蕴,如何監(jiān)控
開發(fā)證書
- 蘋果使用證書的目的是什么
- AppStore安裝app時(shí)的認(rèn)證流程
- 開發(fā)者怎么在debug模式下把a(bǔ)pp安裝到設(shè)備呢
架構(gòu)設(shè)計(jì)
典型源碼的學(xué)習(xí)
只是列出一些iOS比較核心的開源庫,這些庫包含了很多高質(zhì)量的思想弟头,源碼學(xué)習(xí)的時(shí)候一定要關(guān)注每個(gè)框架解決的核心問題是什么吩抓,還有它們的優(yōu)缺點(diǎn),這樣才能算真正理解和吸收
- AFN
- SDWebImage
- JSPatch赴恨、Aspects(雖然一個(gè)不可用琴拧、另一個(gè)不維護(hù),但是這兩個(gè)庫都很精煉巧妙嘱支,很適合學(xué)習(xí))
- Weex/RN, 筆者認(rèn)為這種前端和客戶端緊密聯(lián)系的庫是必須要知道其原理的
- CTMediator蚓胸、其他router庫,這些都是常見的路由庫除师,開發(fā)中基本上都會(huì)用到
- 請
圈友
們在評論下面補(bǔ)充吧
架構(gòu)設(shè)計(jì)
- 手動(dòng)埋點(diǎn)沛膳、自動(dòng)化埋點(diǎn)、可視化埋點(diǎn)
-
MVC汛聚、MVP锹安、MVVM
設(shè)計(jì)模式 - 常見的設(shè)計(jì)模式
- 單例的弊端
- 常見的路由方案,以及優(yōu)缺點(diǎn)對比
- 如果保證項(xiàng)目的穩(wěn)定性
- 設(shè)計(jì)一個(gè)圖片緩存框架(LRU)
- 如何設(shè)計(jì)一個(gè)
git diff
- 設(shè)計(jì)一個(gè)線程池倚舀?畫出你的架構(gòu)圖
- 你的app架構(gòu)是什么叹哭,有什么優(yōu)缺點(diǎn)、為什么這么做痕貌、怎么改進(jìn)
其他問題
-
PerformSelector & NSInvocation
優(yōu)劣對比 -
oc
怎么實(shí)現(xiàn)多繼承风罩?怎么面向切面 - 哪些
bug
會(huì)導(dǎo)致崩潰,如何防護(hù)崩潰 - 怎么監(jiān)控崩潰
-
app
的啟動(dòng)過程(考察LLVM編譯過程舵稠、靜態(tài)鏈接超升、動(dòng)態(tài)鏈接、runtime初始化) - 沙盒目錄的每個(gè)文件夾劃分的作用
- 簡述下
match-o
文件結(jié)構(gòu)
系統(tǒng)基礎(chǔ)知識
- 進(jìn)程和線程的區(qū)別
-
HTTPS
的握手過程 - 什么是
中間人攻擊
哺徊?怎么預(yù)防 -
TCP
的握手過程室琢?為什么進(jìn)行三次握手,四次揮手 -
堆和棧
區(qū)的區(qū)別落追?誰的占用內(nèi)存空間大 - 加密算法:
對稱加密算法和非對稱加密算法
區(qū)別 - 常見的
對稱加密和非對稱加密
算法有哪些 -
MD5盈滴、Sha1、Sha256
區(qū)別 -
charles
抓包過程轿钠?不使用charles
巢钓,4G
網(wǎng)絡(luò)如何抓包
數(shù)據(jù)結(jié)構(gòu)與算法
對于移動(dòng)開發(fā)者來說病苗,一般不會(huì)遇到非常難的算法,大多以數(shù)據(jù)結(jié)構(gòu)為主竿报,筆者列出一些必會(huì)的算法铅乡,當(dāng)然有時(shí)間了可以去LeetCode上刷刷題
- 八大排序算法
- 棧&隊(duì)列
- 字符串處理
- 鏈表
- 二叉樹相關(guān)操作
- 深搜廣搜
- 基本的動(dòng)態(tài)規(guī)劃題、貪心算法烈菌、二分查找