來自于CSDN,地址:https://blog.csdn.net/samuelandkevin/article/details/81433071
并且不定期更新。
面試題目涉及:
(1)
2019年岩四,iOS 面試題持續(xù)更新
2017年5月iOS招人心得(附面試題)
2018年 iOS 面試心得
出一套 iOS 高級面試題
iOS面試題總結(jié)(三)
答《 卓同學(xué)的 Swift 面試題 》
《招聘一個靠譜的 iOS》
2019 面試總結(jié)
也許,這樣理解HTTPS更容易
大廠會問:算法优妙,數(shù)據(jù)結(jié)構(gòu)况芒,scoket原理么伯,用過什么框架盯仪,編譯原理紊搪,自己搭建的網(wǎng)絡(luò)框架(用非官方api)
(2)設(shè)計模式有哪幾種? mvc,mvvm , mvp ,分別介紹一下全景,runtime作用耀石。
23種設(shè)計模式:
1.創(chuàng)建型模式:工廠模式、抽象工廠模式蚪燕、單例模式娶牌、建造者模式、原型模式馆纳。
創(chuàng)建型模式關(guān)注對象的創(chuàng)建過程诗良。
2.結(jié)構(gòu)型模式:適配器模式、代理模式鲁驶、橋接模式鉴裹、裝飾模式、組合模式钥弯、外觀模式径荔、享元模式。
結(jié)構(gòu)型模式關(guān)注對象和類的組織脆霎。
3.行為型模式:模板方法模式总处、命令模式、迭代器模式睛蛛、觀察者模式鹦马、中介者模式、備忘錄模式忆肾、解釋器模式荸频、狀態(tài)模式、策略模式客冈、職責(zé)鏈模式旭从、訪問者模式。
(3)基本的問題:數(shù)據(jù)庫的泛型场仲。json xml 區(qū)別和悦。
(4)ARC內(nèi)存管理機制.
dispatch_group
dispatch_barrier
dispatch_semaphore : 為線程加鎖
多線程死鎖的產(chǎn)生以及如何避免死鎖
五個案例讓你明白GCD死鎖
iOS線程鎖及其性能
自選鎖:自旋鎖的效率遠(yuǎn)高于互斥鎖,保持鎖時間非常短燎窘,當(dāng)?shù)却龝r會消耗大量 CPU 資源摹闽。
對象鎖:
互斥鎖:多個線程安全訪問競爭資源。
條件鎖:根據(jù)條件決定是否繼續(xù)運行線程褐健,即線程是否被阻塞。
遞歸鎖:同一線程中在未解鎖之前還可以上鎖, 執(zhí)行鎖中的代碼。主要是用在循環(huán)或遞歸操作中
dispatch_semaphore_create(信號量值)[最多幾個線程可訪問]
dispatch_semaphore_wait(信號量蚜迅,等待時間) [總信號量減1舵匾,當(dāng)信號總量為0時,線程阻塞]
dispatch_semaphore_signal(信號量) [信號總量加1]
//等待異步任務(wù)完成后才執(zhí)行
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
dispatch_queue_t queue = dispatch_queue_create("com.apple.test", DISPATCH_QUEUE_SERIAL);
__block int number = 0;
dispatch_async(queue, ^{
number = 100;
dispatch_semaphore_signal(semaphore);
});
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
NSLog(@"等待異步任務(wù)完成后才執(zhí)行,number=%d",number);
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, queue, ^{ /*加載圖片1 */ });
dispatch_group_async(group, queue, ^{ /*加載圖片2 */ });
dispatch_group_async(group, queue, ^{ /*加載圖片3 */ });
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
// 合并圖片
});
iOS 有四個任務(wù)ABCD谁不,先執(zhí)行AB坐梯,再執(zhí)行CD
//方法一:
-(void)doBarrier{
dispatch_queue_t queue = dispatch_queue_create("com.test.sx", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue, ^{
NSLog(@"AAAAAA");
});
dispatch_async(queue, ^{
NSLog(@"BBBBBB");
});
dispatch_barrier_sync(queue, ^{
NSLog(@"");
});
dispatch_async(queue, ^{
NSLog(@"CCCCCC");
});
dispatch_async(queue, ^{
NSLog(@"DDDDDD");
});
}
//方法二:
-(void)doGroupAndNotify{
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"AAAAAA");
});
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"BBBBBB");
});
dispatch_group_notify(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"CCCCCC");
});
dispatch_group_notify(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"DDDDDD");
});
}
(5)UIViewController生命周期:
1.initWithNibName:bundle:(storyBoard, xib,純代碼布局都會執(zhí)行)
2.initWithCoder(storyBoard,xib執(zhí)行)
3.awakeFromNib(storyBoard,xib執(zhí)行)
4.loadView
5.viewDidLoad
6.viewWillAppear
7.viewWillLayoutSubviews
8.viewDidLayoutSubviews
9.viewDidAppear
10.viewWillDisappear
11.viewDidDisappear
app生命周期
app有5種狀態(tài):
1、Not running未運行
2刹帕、Inactive未激活
3吵血、Active激活
4、Backgroud后臺
5偷溺、Suspended掛起
iOS啟動執(zhí)行順序:
點擊程序圖標(biāo)->main()->UIApplicationMain()-UIApplicationDelegate
區(qū)分(runloop,響應(yīng)者鏈) :在一個app中間有一個button蹋辅,在你手觸摸屏幕點擊后,到這個button收到點擊事件挫掏,中間發(fā)生了什么.
(6)RunLoop相關(guān),使用定時器要注意什么問題?
(7)總結(jié)一下你項目的難點侦另,怎么解決。(可以談一下斷點續(xù)傳尉共,下載)
(8)地圖用了什么坐標(biāo)系褒傅。
(9)C指針類型轉(zhuǎn)換。core graph 畫圖袄友,圓點殿托。
(10)runtime在實際開發(fā)的應(yīng)用。
1.將某些OC代碼轉(zhuǎn)為運行時代碼剧蚣,探究底層支竹,比如block的實現(xiàn)原理(上邊已講到);
2.攔截系統(tǒng)自帶的方法調(diào)用(Swizzle 黑魔法)券敌,比如攔截imageNamed:唾戚、viewDidLoad、alloc待诅;
3.實現(xiàn)分類也可以增加屬性叹坦;
4.實現(xiàn)NSCoding的自動歸檔和自動解檔;
5.實現(xiàn)字典和模型的自動轉(zhuǎn)換卑雁。
(11)
(12)Swift面試題
socket心跳機制,通信原理,怎么跟服務(wù)器進行報文傳輸,怎么防止丟包,斷線重連
地圖多點集合怎么實現(xiàn),數(shù)據(jù)量超多的時候
百度地圖點聚合實現(xiàn)方式
信號量如何加鎖
app生命周期,UIViewController生命周期
蘋果最新的技術(shù)
快應(yīng)用
大圖片加載,分片加載,列表緩存機制.
UIViewController生命周期
(13)iOS UI事件傳遞與響應(yīng)者鏈
找到第一響應(yīng)者
hitTest:withEvent:(返回點擊所在的視圖)
pointInside:withEvent:(釋放在視圖的點擊范圍內(nèi))
不能響應(yīng):(1)userInteractionEnabled = NO (2)hidden = YES (3)透明度 alpha 小于等于0.01 (4)子視圖超出了父視圖區(qū)域
(14)iOS 遠(yuǎn)程消息推送 APNS推送原理和一步一步開發(fā)詳解篇
蘋果禁用UDID,
應(yīng)用卸載重裝或者系統(tǒng)升級,UUID會變化莹捡。
通過第三方框架openUDID獲取設(shè)備唯一標(biāo)識符扣甲。
(15) 2018FFMPEG跨平臺iOS&Android高級開發(fā)視頻教程
(16)第三方框架源碼分析
SDWebImage4.0源碼探究(一)面試題
SDWebImage 源碼閱讀筆記
【iOS開源庫】SDWebImage源碼閱讀&原理解析
(17)iOS NSCache緩存類的詳解
(18)程序員面試閃充--iOS密碼學(xué) AES,MD5,HMAC,RSA,BASE64
(19)一個int占多少個字節(jié)?
(20)【iOS沉思錄】Objective-C語言的動態(tài)性總結(jié)(編譯時與運行時)
(21)UIView的setNeedsLayout, layoutIfNeeded 和 layoutSubviews 方法之間的關(guān)系解釋
(22)十六進制轉(zhuǎn)二進制,二進制轉(zhuǎn)10進制,十六進制轉(zhuǎn)10進制
eg: 0110 0001 是 0x61
0001 1111 是 0x1f
0x17 是 23
十進制轉(zhuǎn)二進制
除二取余篮赢,直到商為1或0,余數(shù)倒序排列
eg: 8 -> 1000 启泣, 2 -> 10 , 4 -> 100
二進制轉(zhuǎn)換為十進制
eg:11 -> 1 * 2 ^ 1 + 1* 2 ^ 0 = 3
十進制轉(zhuǎn)換為十六進制
除16取余,直到商為0寥茫,余數(shù)倒序排序
eg: 120 -> 78
十六進制轉(zhuǎn)換為十進制
eg:2AF5 轉(zhuǎn)為 5 * 16 ^ 0 + 15 * 16 ^1 + 10 * 16 ^ 2 + 2 * 16 ^ 3 = 10997
二進制轉(zhuǎn)16進制
eg: 10111011011.1001
B9B.9
16進制和二進制對應(yīng)關(guān)系:
二進制 16進制
0000 -> 0
0001 -> 1
0010 -> 2
0011 -> 3
0100 -> 4
0101 -> 5
0110 -> 6
0111 -> 7
1000 -> 8
1001 -> 9
1010 -> A
1011 -> B
1100 -> C
1101 -> D
1110 -> E
1111 -> F
表示16進制方法:
1.字母H后綴表示
2.0x前綴表示
eg: BH 等價于 0xB
(23)
1.字節(jié)就是Byte遣蚀,也是B
2.位就是bit也是b
3.轉(zhuǎn)換關(guān)系如下:1)1KB=1024B
- 1B= 8b
(24)iOS Block 詳解 全局塊纱耻,棧塊,堆塊
全局block弄喘,相當(dāng)于單例限次,存在內(nèi)存。
棧區(qū)block,變量作用域結(jié)束卖漫,block被釋放
堆區(qū)block羊始,手動管理block內(nèi)存。
在ARC環(huán)境下突委,外界變量copy從棧區(qū)拷貝到堆區(qū)匀油。
block和block修飾的變量從棧區(qū)拷貝到堆區(qū)。是怎么做到桥滨?
block內(nèi)部有個__forwarding私有成員變量弛车,指向__block變量。
防止循環(huán)引用:
__weak typeof(self) weakSelf = self;
(25)一個int變量被__block修飾與否的區(qū)別喻括?
(26)Flex 布局
CSS 常見布局方式
轉(zhuǎn)載-flexbox布局口訣(圖文)
(27)iOS Core Animation: Advanced Techniques核心動畫中文譯本
iOS圖片分片加載
WWDC2018 圖像最佳實踐
iOS 組件化 —— 路由設(shè)計思路分析
WWDC2014之iOS使用動態(tài)庫
iOS插件化
ios組件化/模塊化
組件化的優(yōu)點:
1.組件的獨立性
2.資源重用
3.高效迭代
4.加快項目編譯速度
組件化的內(nèi)容包含:
1.基礎(chǔ)組件
基礎(chǔ)配置(宏唬血,常量)
分類
網(wǎng)絡(luò)(AFN,SDWeb二次封裝)
工具類(日期時間的處理刁品,文件處理挑随,設(shè)備處理)
2.功能組件:
控件(彈幕勒叠,輪播器,選項卡)
功能(斷點續(xù)傳拌汇,音頻處理)
3.業(yè)務(wù)組件:
命令模式
CTMediator
Command:抽象命令類 提供接口
ConcreteCommand:具體命令類
Invoker:調(diào)用者
Receiver:接收者
Client:客戶類
命令的
命令接收者
(28)
1.<font color="blue">OS底層-基于C的BSD Socket</font>
socket(),close(),bind(),accept(),connect(),send(),receive()...
2.<font color="blue">基于Socket原生的CocoaAsyncSocket</font>
3.<font color="blue">基于webSocket的IM弊决,SocketRocket</font>
<font color="blue">心跳</font>:檢測TCP連接的雙方是否可用。
<font color="blue">斷線重連</font>:
<font color="blue">TCP的keepAlive機制</font>:只能保證連接的存在与倡,但是并不能保證客戶端以及服務(wù)端的可用性.
<font color="blue">心跳機制</font>:客戶端發(fā)起心跳昆稿,如果沒收到回復(fù),主動斷開連接净响。服務(wù)器端維護心跳間隔喳瓣,約定時間沒收到客戶端發(fā)來的心跳,主動斷開連接配乓。
需要心跳機制的原因:在于國內(nèi)運營商NAT超時蹭秋。
<font color="blue">NAT:網(wǎng)絡(luò)地址轉(zhuǎn)換</font>.NAT設(shè)備到出去和進來的數(shù)據(jù)進行修改仁讨。映射被NAT設(shè)備淘汰,無法通信盐固。
<font color="blue">心跳間隔:</font>而國內(nèi)的運營商一般NAT超時的時間為5分鐘,所以通常我們心跳設(shè)置的時間間隔為3-5分鐘志电。
<font color="blue">PingPong機制</font>:
<font color="blue">重連機制</font>:第一次立刻重連蛔趴,第二次2秒,第三次4秒鱼蝉,第四次8秒...直到大于64秒就不再重連,連接成功箫荡,重置重連時間。
<font color="blue">傳輸技術(shù)</font>:分片上傳洁奈、斷點續(xù)傳绞灼、秒傳技術(shù)。
音視頻的采集镀赌、編碼、網(wǎng)絡(luò)傳輸喉钢、解碼良姆、播放
<font color="blue">粘包:</font>同一時間發(fā)送幾條數(shù)據(jù)玛追,服務(wù)端只收到一條大數(shù)據(jù)。
<font color="blue">粘包原因:</font>TCP的Nagle算法韩玩,多次間隔小且數(shù)據(jù)量小陆馁,合成一大塊封包叮贩。
<font color="blue">斷包:</font>發(fā)送緩存去大小有限佛析,分段發(fā)送彪蓬。
<font color="blue">解析數(shù)據(jù)機制:</font>封包時候給每個數(shù)據(jù)包加一個長度或者一個開始結(jié)束標(biāo)記档冬。
拆包的時候按照長度或者分解符拆包。
<font color="blue">封包發(fā)送具體過程:</font>
定義(長度辽狈、類型)字典->json字符串->NSData(長度data)
新建可變data ->拼接長度data -> 拼接分界符data -> 拼接消息data
->調(diào)用:writeData:withTimeout:tag
<font color="blue">拆包具體過程:</font>
讀取包頭呛牲,NSData->NSDictionary,取出數(shù)據(jù)長度->讀取數(shù)據(jù)長度的數(shù)據(jù)readDataToLength: withTimeout:tag:->根據(jù)長度和類型娘扩,數(shù)據(jù)處理.
數(shù)據(jù)讀取完壮锻,繼續(xù)讀取下一數(shù)據(jù)包包頭
readDataToData:[GCDAsyncSocket CRLFData] withTimeout:-1 tag:110
(29)斷點續(xù)傳:
實現(xiàn)斷點續(xù)傳要了解HTTP請求頭Range,通過設(shè)置Range可以指定每次從網(wǎng)絡(luò)下載數(shù)據(jù)包的大小
Range
bytes=0-499 ,從0到499的頭500個字節(jié)
bytes=500-999,從500到999的第二個500字節(jié)
bytes=500- ,從500字節(jié)以后的所有字節(jié)
bytes=-500, 最后500個字節(jié)
bytes=500-599,800-899 同時指定幾個范圍
用原生API請求
NSURL *url = [NSURL URLWithString:@""];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
NSString *range = [NSString stringWithFormat:@"bytes=%lld-", self.currentLength];
[request setValue:range forHTTPHeaderFiled:@"Range"];
實現(xiàn)方式
(1)NSURLConnection
(2)NSURLSession(iOS7 新出)
有三種任務(wù)類型:
<font color="blue">NSURLSessionDataTask </font>: 普通的GET\POST請求
<font color="blue">NSURLSessionDownloadTask </font>: 文件下載
<font color="blue">NSURLSessionUploadTask</font> : 文件上傳
注意
NSURLSessionDownloadTask* downloadTask = [session downloadTaskWithURL:url completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
}];
location就是下載好的文件寫入沙盒的地址(iOS沙盒文件夾(Documents,Library,tmp))
下載完成之后會自動刪除temp中的文件,開發(fā)者需要在回調(diào)中把文件移動或者復(fù)制到指定目錄下
缺點就是無法監(jiān)聽下載進度
要監(jiān)聽下載進度,NSURLSessionDownloadDelegate
<font color="blue">NSURLSessionDownloadDelegate的三個方法</font>
<font color="red">didFinishDownloadingToURL</font> 下載完畢會調(diào)用
<font color="red">didWriteData:totalBytesWritten:totalBytesExpectedToWrite</font>: (這次寫入的大小:已經(jīng)寫入沙盒的大小:文件總大小)
<font color="red">didResumeAtOffset:expectedTotalBytes</font> (恢復(fù)下載后調(diào)用)
downloadTaskWithResumeData: (恢復(fù)下載)
開發(fā)遇到問題:
<font color="red">接收文件的NSMutableData一直內(nèi)存,隨著文件的下載一直變大.</font>
解決:
NSFileHandle,對文件讀取,寫入,更新.
移動到文件的最后面: seekToEndFile
將數(shù)據(jù)寫入沙盒: writeData
累計寫入文件的長度: self.currentLength += data.length
加載完畢調(diào)用: closeFile
邊下邊播
iOS實現(xiàn)邊下邊播
mp4的基本格式可參考
TCP交互協(xié)議中的字節(jié)處理,查看iOS基礎(chǔ)之字節(jié)處理(NSData,Byte,NSString轉(zhuǎn)換)
解析媒體文件,最關(guān)心是視頻文件的寬高,時長,碼率,編碼格式,幀列表,關(guān)鍵幀列表
開發(fā)難點:
1.解析視頻的頭信息(mp4)
2.播放優(yōu)化(播放到未下載的地方的處理方式)
注意:
手機錄制的視頻都比較大灰殴,1s就得占用1M
上傳服務(wù)器必須壓縮
功能實現(xiàn):
將視頻或圖片分段讀取并上傳服務(wù)器,NSFileHandle
讀取服務(wù)器返回的分段數(shù)據(jù)并保存在本地
AVPlayer包含以下幾個類:
AVURLAsset 是AVAsset的子類牺陶,負(fù)責(zé)網(wǎng)絡(luò)連接辣之,請求數(shù)據(jù)
AVPlayerItem 播放資源的狀態(tài)。
AVPlayer 解碼處理成為圖像和聲音
AVPlayerLayer 圖像層
注意:
視頻沒準(zhǔn)備好播放,不要把AVPlayerLayer圖層添加到cell上,這樣會造成顯示的圖層變成黑色.
流程:(AVFoundation可以幫我們完成)
建立連接,請求數(shù)據(jù) AVURLAsset
數(shù)據(jù)狀態(tài)管理 AVPlayerItem
解碼數(shù)據(jù) AVPlayer
音視頻輸出 AVPlayerLayer
手動干預(yù)系統(tǒng)播放器加載數(shù)據(jù)的內(nèi)部實現(xiàn)
AVURLAsset下有一個AVAssetResourceLoader屬性
AVAssetResourceLoader 負(fù)責(zé)加載數(shù)據(jù),調(diào)用時機:AVURLAsset不知道如何去加載這個URL資源時
AVAssetResourceLoaderDelegate
怎么手動干預(yù)?回答:把目標(biāo)視頻URL地址的scheme替換為不能識別的scheme.
視頻第一次播放,播放器獲取前兩個字節(jié)的數(shù)據(jù),就是URL的contentType
注意:
大文件讀取應(yīng)該分段讀取.不應(yīng)該將視頻文件一次性全部讀出來.假如一個視頻有 1 GB狮鸭,那內(nèi)存會突然爆掉
(30)
教你開發(fā)省電的 iOS app(WWDC17 觀后)
耗電:
CPU處理,網(wǎng)絡(luò),定位,圖像
app安全
手段:class-dump,tweak,反匯編,http抓包
第三方sdk:網(wǎng)易易盾,360,頂象
iOS應(yīng)用加固:(1)字符串加密 (2)代碼邏輯混淆 (3)符號混淆
網(wǎng)絡(luò)安全: (1)DDoS高防 (2)滲透測試 (3)Web應(yīng)用防火墻
模擬黑客攻擊
反爬蟲,防止sql注入
性能指標(biāo),監(jiān)控的范圍,有哪些輔助工具,提交代碼時可以機器檢查團隊代碼命名規(guī)范,線上的異常信息如何捕捉,JIRA和Confluence,iOS Monkey測試,圖片預(yù)加載,無埋點技術(shù)的實現(xiàn).
iOS一行代碼監(jiān)測FPS/內(nèi)存/CPU
代碼規(guī)范檢測工具: 1.OCLint + xcpretty 2.sonar 3.infer 4.fauxpas
iOS代碼檢測入坑記事
基于Sonar的iOS代碼質(zhì)量檢測系統(tǒng)
(31)
Object-c的類沒有多繼承,只支持單繼承,如果要實現(xiàn)多繼承的話,可以通過類別和協(xié)議的方式來實現(xiàn),OC類似于多繼承,是在 用protocol委托代理來實現(xiàn)的;可以實現(xiàn)多個接口,通過實現(xiàn)多個接口可以完成C++的多重繼承;Category是類別,一般情況用分類好,用Category去重寫類的方法,僅對本Category有效,不會影響到其他類與原有類的關(guān)系歧蕉。
(32)AVFoundation/CoreMedia/VideoToolBox, Poco C/C++開源庫
音視頻編碼解碼+渲染,音視頻合成
AVFoundation視頻播放和錄制,音視頻合成寫入box合成mp4,aac+h264寫入box,創(chuàng)建音頻輸入,視頻寫入,AVAssetWriter.
(33)怎么創(chuàng)建一個可以釋放的單例,怎么實現(xiàn)多繼承,怎么調(diào)用c和c++
(34)
(34)消息轉(zhuǎn)發(fā)的底層實現(xiàn):
1.+resolveInstanceMethod:
+resolveClassMethod:(如果已添加了實現(xiàn)函數(shù)惯退,消息發(fā)送麻削,否則跳到下一步)
2.-forwardingTargetForSelector:(不是self和nil,消息發(fā)送,否則跳到下一步)
3.-methodSignatureForSelector:(函數(shù)的參數(shù)和返回值類型為nil,doesNotRecognizeSelector,否則跳到下一步)
4.-forwardInvocation:(消息發(fā)送)
答案參考資源:
<1>:
iOS 常見知識點(二):RunLoop
深入理解RunLoop
《IOS—實例化講解 RunLoop》
【iOS程序main函數(shù)之前發(fā)生了什么】
<3>:
《Runtime應(yīng)用之關(guān)聯(lián)對象和MethodSwizzling》
《談Runtime機制和使用的整體化梳理》
《OC最實用的runtime總結(jié)框沟,面試、工作你看我就足夠了拧晕!》
<4>:
《YYModel 源碼歷險記(五)YYModelPropertyMeta 神奇的 next》
《YYModel代碼分析筆記》
<5>:
什么 MVC厂捞、MVVC队丝、MVP…本質(zhì)上都是一樣的,核心思想是 Separated Presentation 和 Observer Synchronization
iOS 架構(gòu)模式 - 簡述 MVC, MVP, MVVM 和 VIPER (譯)
<6>:
《無限輪播圖片》
《iOS 實現(xiàn)時間線列表效果》
<7>:
GCD 那些事
dispatch_barrier_sync 和dispatch_barrier_async的區(qū)別
<8>:
leetcode刷題
<9>:
iOS 開發(fā)之Core Graphics(二)詳解-基礎(chǔ)篇
iOS繪圖框架CoreGraphics分析
<10>:
iOS 音頻錄制AMR和WAV互轉(zhuǎn)(支持64位)
iOS 通過(lame)將錄制音頻轉(zhuǎn)換成Mp3
<11>UIView and layer 的關(guān)系
UIView和CALayer是啥關(guān)系?