一、数组和链表的优缺点
1、数组,在内存上是连续的空间,即顺序存储,所以在通过索引进行查询数据时效率比较高;而对于数组插入和删除操作,则效率会比较低,在第一个位置进行插入数据,其余数据就需要依次向后移动,而第一个数据进行删除,则需要所有数据全部向前移。
2、存储由数据和指针两部分组成存放在内存中是不连续的。 链表是由一系列节点组成的,每个节点都会有一个链点,这就是next链,而next链则会执行下一个node的引用,所以我们在插入或者删除的时候,需要该表链表next链的指向地址即可,每个节点不需要内存进行连续存储,这样会减小删除和插入的线性开销。链表结构主要分为两种链表,单向链表和双向链表 ,即单向链表只有一个next链,而双向链表会有next链和pre链。
二、iOS捕获异常并获取崩溃日志
1、在程序启动时加上一个异常捕获监听,用来处理程序崩溃时的回调动作
NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);
UncaughtExceptionHandler是一个函数指针,该函数需要我们实现,可以取自己想要的名字。当程序发生异常崩溃时,该函数会得到调用。
2、实现处理函数void UncaughtExceptionHandler(NSException *exception) { NSArray *arr = [exception callStackSymbols];//得到当前调用栈信息 NSString *reason = [exception reason];//非常重要,就是崩溃的原因 NSString *name = [exception name];//异常类型 }3、发给开发者,主要有种方式
a、将崩溃信息持久化在本地,下次程序启动时,将崩溃信息作为日志发送给开发者。
b、通过邮件发送给开发者。不过此种方式需要得到用户的许可,因为iOS不能后台发送短信或者邮件,会弹出发送邮件的界面,只有用户点击了发送才可发送。
NSString *crashLogInfo = [NSString stringWithFormat:@"exception type : %@ \n crash reason : %@ \n call stack info : %@", name, reason, arr]; NSString *urlStr = [NSString stringWithFormat:@"mailto://[email protected]?subject=bug报告&body=感谢您的配合! 错误详情:%@",crashLogInfo]; NSURL *url = [NSURL URLWithString:[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; [[UIApplication sharedApplication] openURL:url];