基礎(chǔ)相關(guān)
- 什么是ARC?
- block一般用那個(gè)關(guān)鍵字修飾,為什么?
- 用@property聲明的NSString(或NSArray,NSDictionary)經(jīng)常使用copy關(guān)鍵字,為什么?如果改用strong關(guān)鍵字,可能造成什么問題?
- @property 的本質(zhì)是什么?ivar、getter、setter 是如何生成并添加到這個(gè)類中的。
- 分別寫一個(gè)setter方法用于完成
@property (nonatomic,retain)NSString *name
@property (nonatomic,copy) NSString *name - 說說assign vs weak,_block vs _weak的區(qū)別
- 請說出下面代碼是否有問題,如果有問題請修改?
@autoreleasepool {
for (int i=0; i[largeNumber; i++) { (因識別問題,該行代碼中尖括號改為方括號代替)
Person *per = [[Person alloc] init];
[per autorelease];
}
}
- 請問下面代碼是否有問題,如有問題請修改?
@autoreleasepool {
NSString *str = [[NSString alloc] init];
[str retain];
[str retain];
str = @"jxl";
[str release];
[str release];
[str release];
}
- 什么情況下使用weak關(guān)鍵字,相比assign有什么不同?什么情況使用weak關(guān)鍵字?
11.內(nèi)存管理語義(assign、strong、weak等的區(qū)別)
參考總結(jié)
runtime相關(guān)問題
結(jié)構(gòu)模型
- 介紹下runtime的內(nèi)存模型(isa、對象、類、metaclass、結(jié)構(gòu)體的存儲信息等)
- 為什么要設(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í)候,方法查詢-> 動態(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下哪些情況會造成內(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)
蘋果并沒有開源相關(guān)代碼,但是可以讀下GNUStep的源碼,基本上實(shí)現(xiàn)方式很具有參考性
- 實(shí)現(xiàn)原理(結(jié)構(gòu)設(shè)計(jì)、通知如何存儲的、
name&observer&SEL之間的關(guān)系等) - 通知的發(fā)送時(shí)同步的,還是異步的
-
NSNotificationCenter接受消息和發(fā)送消息是在一個(gè)線程里嗎?如何異步發(fā)送消息 -
NSNotificationQueue是異步還是同步發(fā)送?在哪個(gè)線程響應(yīng) -
NSNotificationQueue和runloop的關(guān)系 - 如何保證通知接收的線程在主線程
- 頁面銷毀時(shí)不移除通知會崩潰嗎
- 多次添加同一個(gè)通知會是什么結(jié)果?多次移除通知呢
- 下面的方式能接收到通知嗎?為什么
// 發(fā)送通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNotification:) name:@"TestNotification" object:@1];
// 接收通知
[NSNotificationCenter.defaultCenter postNotificationName:@"TestNotification" object:nil];
Runloop & KVO
runloop
- app如何接收到觸摸事件的
- 為什么只有主線程的runloop是開啟的
- 為什么只在主線程刷新UI
- PerformSelector和runloop的關(guān)系
- 如何使線程保活
KVO
- 實(shí)現(xiàn)原理
- 如何手動關(guān)閉kvo
- 通過KVC修改屬性會觸發(fā)KVO么
- 哪些情況下使用kvo會崩潰,怎么防護(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)原理
- 什么情況下會死鎖
- 有哪些類型的線程鎖,分別介紹下作用和使用場景
- 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的刷新原理
- 隱式動畫 & 顯示動畫區(qū)別
- 什么是離屏渲染
- imageName & imageWithContentsOfFile區(qū)別
- 多個(gè)相同的圖片,會重復(fù)加載嗎
- 圖片是什么時(shí)候解碼的,如何優(yōu)化
- 圖片渲染怎么優(yōu)化
- 如果GPU的刷新率超過了iOS屏幕60Hz刷新率是什么現(xiàn)象,怎么解決
性能優(yōu)化
- 如何做啟動優(yōu)化,如何監(jiān)控
- 如何做卡頓優(yōu)化,如何監(jiān)控
- 如何做耗電優(yōu)化,如何監(jiān)控
- 如何做網(wǎng)絡(luò)優(yōu)化,如何監(jiān)控
- 如何降低APP包的大小
- 如何提升 tableview 的流暢度
- 如何檢測離屏渲染與優(yōu)化
- 日常如何檢查內(nèi)存泄露?
開發(fā)證書
- 蘋果使用證書的目的是什么
- AppStore安裝app時(shí)的認(rèn)證流程
- 開發(fā)者怎么在debug模式下把a(bǔ)pp安裝到設(shè)備呢
其他問題
-
PerformSelector & NSInvocation優(yōu)劣對比 -
oc怎么實(shí)現(xiàn)多繼承?怎么面向切面(可以參考Aspects深度解析-iOS面向切面編程) - 哪些
bug會導(dǎo)致崩潰,如何防護(hù)崩潰 - 怎么監(jiān)控崩潰
-
app的啟動過程(考察LLVM編譯過程、靜態(tài)鏈接、動態(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ò)如何抓包
架構(gòu)設(shè)計(jì)
- 手動埋點(diǎn)、自動化埋點(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)
數(shù)據(jù)結(jié)構(gòu)與算法
- 八大排序算法
- 棧&隊(duì)列
- 字符串處理
- 鏈表
- 二叉樹相關(guān)操作
- 深搜廣搜
- 基本的動態(tài)規(guī)劃題、貪心算法、二分查找