
我相信很多人都在說,iOS行業(yè)不好了,iOS現(xiàn)在行情越來越難了,失業(yè)的人比找工作的人還要多。失業(yè)即相當于轉行,跳槽即相當于降低自己的身價。那么做iOS開發(fā)的你,你是否在時刻準備著跳槽或者轉行了。
關于iOS 性能優(yōu)化梳理:
基本工具、業(yè)務優(yōu)化、內存優(yōu)化、卡頓優(yōu)化、布局優(yōu)化、電量優(yōu)化、 安裝包瘦身、啟動優(yōu)化、網(wǎng)絡優(yōu)化等
基本工具:
TODO: Instruments 高級技巧、常見的優(yōu)化技能
業(yè)務性能監(jiān)控, 在人工的在業(yè)務的開始和結束處打點上報,然后后臺統(tǒng)計達到監(jiān)控目的,是性能優(yōu)化里比較重要的一個維度。具體來說就是測試方法操作執(zhí)行的時間損耗,可能是同步
也可能是異步的。測試的方法大概有如下五種:
第一種: NSDate 精確度可能是微秒(μs)
NSDate* tmpStartData = [NSDate date];
//You code here...
double deltaTime = [[NSDate date] timeIntervalSinceDate:tmpStartData];
NSLog(@"cost time = %f s", deltaTime);
第二種:clock_t 精確度可能是微秒(μs)
clock_t start = clock();
// dosomething
clock_t end = clock();
NSLog(@"時間損耗 %f s", (double)(end - start)/CLOCKS_PER_SEC);
第三種:CFAbsoluteTime 精確度可能是微秒(μs)
CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();
//You code here...
CFAbsoluteTime end = CFAbsoluteTimeGetCurrent();
NSLog(@"cost time = %f s", end - start); //s
第四種:CFTimeInterval 精確度納秒(ns)
CFTimeInterval start = CACurrentMediaTime();
// dosomething
CFTimeInterval end = CACurrentMediaTime();
NSLog(@"時間損耗 = %f s", end - start);
第五種:mach_absolute_time 精確度納秒(ns)
uint64_t start = mach_absolute_time ();
// operation();
uint64_t end = mach_absolute_time ();
uint64_t elapsed = 1e-9 *(end - start);
以上五種方法,實際可用的是最后兩種,這五種都有什么關系呢?
NSDate -> gettimeofday -> mach_absolute_time
也就是說最終的來源還是 mach_absolute_time, gettimeofday 加入的時間同步機制。
簡單說下NSDate 、CFAbsoluteTimeGetCurrent、CACurrentMediaTime 的區(qū)別
框架層:
NSDate 屬于Foundation
CFAbsoluteTimeGetCurrent() 屬于 CoreFoundatio
CACurrentMediaTime() 屬于 QuartzCore
本質區(qū)別:
NSDate 或 CFAbsoluteTimeGetCurrent() 返回的時鐘時間將會會網(wǎng)絡時間同步,從時鐘 偏移量的角度,mach_absolute_time() 和 CACurre[圖片上傳中...(image.png-c2fc24-1546591771268-0)]
ntMediaTime() 是基于內建時鐘的,能夠更精確更原子化地測量,并且不會因為外部時間變化而變化(例如時區(qū)變化、夏時制、秒突變等),但它和系統(tǒng)的uptime有關,系統(tǒng)重啟后CACurrentMediaTime()會被重置。
常見用法:
NSDate、CFAbsoluteTimeGetCurrent()常用于日常時間、時間戳的表示,與服務器之間的數(shù)據(jù)交互
其中 CFAbsoluteTimeGetCurrent() 相當于[[NSDate data] timeIntervalSinceReferenceDate];
CACurrentMediaTime() 常用于測試代碼的效率
在嚴峻的iOS市場中競爭, 沒有掌握和了解一些具有優(yōu)勢的技術性知識,你怎么與別人進行PK,又怎么征服你的面試官。做過三五年的也未必一定會涉足到里面的技術性知識。在找工作中,技術足了,找不到工作也許你缺少的是一份總結和一份面試題去練習。為大家總結一份名企面試資料和面試題:

小編給大家推薦一個iOS技術交流群:691040931群內提供數(shù)據(jù)結構與算法、底層進階、swift、逆向、底層面試題整合文檔等免費資料!
喜歡曉雯就關注曉雯喲??!曉雯微信:Pingwen20