总结

网络通讯中加密方式有哪些,各自原理?

  • md5(哈希算法):把任意长度的字符串加密成一个128bit的大整数,并且是不可逆的。每次固定字符加密出来的密文都相同。如果只是一个"123"字符串,使用MD5加密
  • RSA(非对称算法加密):产生一对非对称的公钥和私钥,公钥加密,私钥解密。私钥加密,公钥解密。
  • AES(对称加密):加密和解密的密钥都是同一个
  • base64(现代密码学基础):(编码方案Base 64)原本8bit一组的数据改成6bit一组,不足的地方补0,每两个0用一个=表示

谈下开发中iOS缓存的理解

缓存主要针对展示UI层数据。比如个人资料界面。

  • 网络优化:开始总是从网络获取,如果获取失败,从本地获取(旧数据)
  • 本地优先:在一段时间内从本地获取,当超过这个时间,然后重新请求网络数据(展示同时覆盖旧数据)
  • 混合:打开App先从本地获取展示,然后请求数据,请求完成后刷新界面。

你认为开发哪些导致crash?

当App闪退时,操作系统会生成一个crash日志,保存在设备上。crash日志上有用的信息,比如每个正在执行线程的完整堆栈信息和内存映像,这样就能够通过,分析这些信息来定位crash发生时的代码逻辑,最终找到App闪退的原因。

crash主要有两种原因:违反iOS系统规则导致的crashApp代码逻辑Bug导致的crash

1.代码逻辑的Bug

  • SEGV:(Segmentation Violation,段违例)。无效的内存地址,如:空指针,未初始化指针,栈溢出等
  • SIGABRT:收到Abort信号,可能自身调用abort()或者收到外部发送过来的信号。
  • SIGBUS:总线错误。访问的是有效地址,但总线访问异常,地址对齐问题。
  • SIGILL:尝试执行非法的指令,可能不被识别或者没有权限
  • SIGFPE:Floating Point Error。数学计算相关问题。不限于浮点计算,例如除零操作
  • SIGPIPE:管道另一端没有进程接手数据;常见的崩溃原因基本都是代码逻辑问题,或资源问题,比如数组越界,访问野指针或资源不存在,或资源大小写错误等。

2.违反iOS系统规则的Bug

  • 内存报警闪退

    • 当iOS检测到内存过低时,系统就会发出低内存警告的通知,尝试回收一些内存。如果没有得到改善,iOS会终止后台应用老回收更多内存。最后,如果还是内存不足,那么正在运行的程序也会被终止掉。在Debug模式下,可以主动将客户端执行的动作逻辑写入一个日志文件中,这样可以将内存预警逻辑写入日志文件,当发送内存报警时,就提醒当前客户端性能内存不足,可以通过Instruments工具中的 LeasksAllocations模块库来发现内存泄露问题和内存分配问题。
  • 响应超时

    • 当App对一些特定的事件(比如启动、挂起、恢复、结束)响应不及时,苹果的Watchdog机制会把应用程序干掉,并生成一份相应的crash日志。
  • 用户强制退出

    • 双击home键,关闭App,这种场景不会产生crash日志,这是所有的App都处于后台状态,而iOS随时可能关闭后台进程,当App阻塞界面并停止响应时,这种场景才会产生crash日志。
    • 比如:复杂的操作:先按住电源键,直到出现”“滑动关机”的界面时,再按住home键。这时候当前的App会被终止掉,并且产生一份相应事件的crash日志。

3.使用过KVO吗?

  • KVO是OC对观察者设计模式的一种实现。[通知机制]
  • KVO:键值监听 提供一种机制,指定一个被观察对象(例如A类),当对象某个属性(例如A中的字符串name)发生更改时,对象会获得通知,并作出相应处理。而且不需要给观察的对象添加任何额外代码,就能使用KVO机制了。
  • 基本原理:KVO的实现依赖于OC强大的Runtime。当观察某对象A时,KVO机制动态创建一个对象A当前类的子类,并为这个子类重写了被观察属性keyPath的Setter方法。Setter方法随后负责通知观察对象属性的改变状况。
  • KVO 优点:

1.能够提供简单的方法实现两个对象的同步
2.能够对内部对象的状态作出相应,而且不需要改变内部对象的实现
3.能够提供被观察者属性的最新值和之前的值
4.完成对观察对象的抽象,不需要额外的代码来允许观察者被观察

  • KVO缺点:

1.观察的属性必须要用字符串定义,编译时不会出现警告
2.对属性重构,修改了一个被观察类的某些属性,但是监听代码没有对应修改,将导致观察代码不可用
3.复杂的"if"语句,要求对象正在观察多个值,因为所有的观察代码通过一个方法来指向
4.当释放观察者的时候不需要移除观察者

  • KVC:键盘编码,是key value coding的简称,是一种可以直接通过字符串名字Key 来访问类属性的机制,而不是通过调用getter setter方法来进行访问
    KVC优点:主要好用减少代码量,没有property变量也能通过KVC进行设置
    KVC缺点:key写错时,编译的时候不会保持,运行时会报错

如何对iOS设备进行性能测试?

  • Instruments 是应用程序用来动态跟踪和分析 Mac OS X 和 iOS 代码的实用工具。这是一个灵活而强大的工具,它让你可以跟踪一个或多个进程,并检查收集的数据。

使用CocoPods吗?它是什么?CocoaPods原理

  • CocoaPods 一个第三方库依赖的管理工具,可用来帮助导入、配置以及更新所用的第三方。
  • CocoaPods 原理 将所有的依赖库都放到另一个名为Pods的项目中,然后让主项目依赖Pods项目
  • 源代码管理工作任务从主项目移到了Pods项目中
    • CocoaPods通过一个名为Pods.xcconfig的文件在编译设置所有的依赖和参数
    • Pods项目最终会编译成一个名为libPods.a的文件,主项目只要依赖这个.a文件就可以了
    • 对于资源文件,CocoaPods提供了一个名为Pods-resource.sh的bash脚本,在每次项目编译的时候都会执行,将第三方库的各种资源文件复制到目标目录中

集成第三方框架有哪些方法?

  • 手动集成。直接下载源码拖进项目用
  • CocoaPods集成。使用编辑podfile文件,然后pod install
  • framework。SangforSDK.a静态库的集成 xxxx.framework
  • Carthage集成。与CocoaPods不同的机制。会生成一个xxx.framework,然后将其拖到项目中。

crash的收集和定位bug的方式谈下

  • iTunes Connect(Manage Your Applications - View Details - Crash Reports),但是前提用户设置->隐私->诊断与用量->诊断与用量数据开启.一般不推荐
  • 自己实现应用内崩溃收集,并上传服务器.eg:aWork异常调试提交(收集异常,存储到本地,下次用户打开程序时上传给我们)
    • 在程序启动时加上一个异常捕获监听,用来处理程序崩溃时的回调动作UncaughtExceptionHandler是一个函数指针,该函数需要我们实现,可以取自己想要的名字。当程序发生异常崩溃时,该函数会得到调用,这跟C,C++中的回调函数的概念是一样的。
NSSetUncaughtExceptionHandler (&UncaughtExceptionHandler)。 程序启动代理方法
//:collection crash info by Mili  

void UncaughtExceptionHandler(NSException *exception) { NSArray *callStack = [exception callStackSymbols];   
NSString *reason = [exception reason]; 
NSString *name = [exception name];  

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
NSString * dateStr = [formatter stringFromDate:[NSDate date]];

NSString * iOS_Version = [[UIDevice currentDevice] systemVersion];
NSString * PhoneSize    =   NSStringFromCGSize([[UIScreen mainScreen] bounds].size);
NSString * App_Version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
NSString * iPhoneType = @"当前设备名字";
NSString *uploadString = @"所有拼接信息";
// 存储到本地沙盒.下次启动找寻

  • 第三方收集crash (比如说集成友盟,使用dSYM分析定位代码)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容

  • iOS 面试题总结(一) 101. 修改下面的代码: typedef enum{ UserSex_Man,User...
    AlaricMurray阅读 1,679评论 0 6
  • (我妖魔化你了?有本事你拿面照妖镜看看自己呗!) 西南某市盛产芦苇。 什么叫盛产?就是小河岸,水库边,随便一条小沟...
    张诚1979阅读 242评论 0 2
  • positive默然阅读 174评论 0 0
  • 你的香腮边轻轻滑落的是你的泪还是我的泪? 初吻吻别的那个季节不是已经哭过了吗? 你的指尖还记忆着你慌乱的心跳, 温...
    南城煙雨的孤阅读 299评论 0 0
  • (1)npm run dev显示端口被占用 去到搭建环境中的config目录下的index.js找到dev,进行端...
    西兰花伟大炮阅读 1,208评论 0 0