我相信很多人都在说,iOS行业不好了,iOS现在行情越来越难了,失业的人比找工作的人还要多。失业即相当于转行,跳槽即相当于降低自己的身价。那么做iOS开发的你,你是否在时刻准备着跳槽或者转行了。
关于iOS 性能优化梳理:
基本工具、业务优化、内存优化、卡顿优化、布局优化、电量优化、 安装包瘦身、启动优化、网络优化等
基本工具:
TODO: Instruments 高级技巧、常见的优化技能
业务性能监控, 在人工的在业务的开始和结束处打点上报,然后后台统计达到监控目的,是性能优化里比较重要的一个维度。具体来说就是测试方法操作执行的时间损耗,可能是同步
也可能是异步的。测试的方法大概有如下五种:
第一种: 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 的区别
框架层:
NSDate 属于Foundation
CFAbsoluteTimeGetCurrent() 属于 CoreFoundatio
CACurrentMediaTime() 属于 QuartzCore
本质区别:
NSDate 或 CFAbsoluteTimeGetCurrent() 返回的时钟时间将会会网络时间同步,从时钟 偏移量的角度,mach_absolute_time() 和 CACurre[图片上传中...(image.png-c2fc24-1546591771268-0)]
ntMediaTime() 是基于内建时钟的,能够更精确更原子化地测量,并且不会因为外部时间变化而变化(例如时区变化、夏时制、秒突变等),但它和系统的uptime有关,系统重启后CACurrentMediaTime()会被重置。
常见用法:
NSDate、CFAbsoluteTimeGetCurrent()常用于日常时间、时间戳的表示,与服务器之间的数据交互
其中 CFAbsoluteTimeGetCurrent() 相当于[[NSDate data] timeIntervalSinceReferenceDate];
CACurrentMediaTime() 常用于测试代码的效率
在严峻的iOS市场中竞争, 没有掌握和了解一些具有优势的技术性知识,你怎么与别人进行PK,又怎么征服你的面试官。做过三五年的也未必一定会涉足到里面的技术性知识。在找工作中,技术足了,找不到工作也许你缺少的是一份总结和一份面试题去练习。为大家总结一份名企面试资料和面试题:
小编给大家推荐一个iOS技术交流群:691040931群内提供数据结构与算法、底层进阶、swift、逆向、底层面试题整合文档等免费资料!
喜欢晓雯就关注晓雯哟!!晓雯微信:Pingwen20