iOS面试笔记(3)

一、数组和链表的优缺点

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];

三、自定义相机
自定义相机使用系统库AVFoundation 30分钟搞定iOS自定义相机


扫描二维码关注公众号,回复: 122030 查看本文章

猜你喜欢

转载自blog.csdn.net/u014745414/article/details/71499652