iOS 面试题及答案

面试题集锦

iOS面试题及答案1
iOS面试题及答案2
iOS进阶面试题及答案3

一. CoreAnimation 相关

CABasicAnimation 资料
CoreAnimation(核心动画)概述

iOS面试题及答案2.5
NStimer准吗?谈谈你的看法?如果不准该怎样实现一个精确的NSTimer?

动画定时器——CADisplayLink

CoreGraphics(核心图形)

它是iOS的核心图形库,包含Quartz2D绘图API接口,常用的是point,size,rect等这些图形,都定义在这个框架中,类名以CG开头的都属于CoreGraphics框架,它提供的都是C语言函数接口,是可以在iOS和mac OS 通用的

QuartzCore

Quartz是位于Mac OS X的Drawin核心之上的绘图层,这个框架感觉不是很清晰,但是看头文件可以发现,它就是CoreAnimation,这个框架头文件只包含了

二. 第三方库

SDWebImage

Github详细资料
缓存策略

AFNetworking/ Alamorefire

Github详细资料

三. 设计模式

1. MVC
2. MVVM
3. 单例

OC:

@implementation Singleton
    +(Singleton *)shared{
        static Singleton* instance = nil;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            instance = [Singleton new];
        });
        return instance;
    }

+(id) allocWithZone:(struct _NSZone *)zone
{
    return [Singleton shareInstance] ;
}

-(id) copyWithZone:(NSZone *)zone
{
    return [Singleton shareInstance] ;
}

-(id) mutablecopyWithZone:(NSZone *)zone
{
    return [Singleton shareInstance] ;
}

Swift:

Class Singleton {
    static let shared = Singleton()
    private init() { }
}
4. 代理
5. 工厂模式

四. 消息传递

KVO

KVO(key-Value-Observing):键值观察机制 他提供了观察某一属性变化的方法,极大的简化了代码。基于runtime机制实现。
KVO只能被KVC触发,包括使用setValue:forKey:方法和点语法。

// 通过下方方法为属性添加KVO观察
- (void)addObserver:(NSObject *)observer
                  forKeyPath:(NSString *)keyPath
                  options:(NSKeyValueObservingOptions)options
                  context:(nullable void *)context;
// 当被观察的属性发送变化时,会自动触发下方方法                   
- (void)observeValueForKeyPath:(NSString *)keyPath
                           ofObject:(id)object
                               change:(NSDictionary *)change
                              context:(void *)context{}

KVC 和 KVO 的 keyPath 可以是属性、实例变量、成员变量。

KVC

KVC(Key-Value-Coding):键值编码 是一种通过字符串间接访问对象的方式(即给属性赋值)
举例说明:

stu.name = @"张三" // 点语法给属性赋值
[stu setValue:@"张三" forKey:@"name"]; // 通过字符串使用KVC方式给属性赋值
stu1.nameLabel.text = @"张三";
[stu1 setValue:@"张三" forKey:@"nameLabel.text"]; // 跨层赋值

当一个对象调用setValue方法时,方法内部会做以下操作:
1). 检查是否存在相应的key的set方法,如果存在,就调用set方法。
2). 如果set方法不存在,就会查找与key相同名称并且带下划线的成员变量,如果有,则直接给成员变量属性赋值。
3). 如果没有找到_key,就会查找相同名称的属性key,如果有就直接赋值。
4). 如果还没有找到,则调用valueForUndefinedKey:和setValue:forUndefinedKey:方法。
这些方法的默认实现都是抛出异常,我们可以根据需要重写它们。

通知

五. HTTP协议相关

详细基础资料

三次握手

四次握手

六. WKWebView相关

1. 缓存
2. Cookie

七. 其它

1. ViewController生命周期
1. initWithCoder:通过nib文件初始化时触发。
2. awakeFromNib:nib文件被加载的时候,会发生一个awakeFromNib的消息到nib文件中的每个对象。      
3. loadView:开始加载视图控制器自带的view。
4. viewDidLoad:视图控制器的view被加载完成。  
5. viewWillAppear:视图控制器的view将要显示在window上。
6. updateViewConstraints:视图控制器的view开始更新AutoLayout约束。
7. viewWillLayoutSubviews:视图控制器的view将要更新内容视图的位置。
8. viewDidLayoutSubviews:视图控制器的view已经更新视图的位置。
9. viewDidAppear:视图控制器的view已经展示到window上。 
10. viewWillDisappear:视图控制器的view将要从window上消失。
11. viewDidDisappear:视图控制器的view已经从window上消失。
2. 闭包的声明

属性声明

void(^propertyName)(void);

函数声明

- (void)function: callback: (ReturnTypeName(^)(TypeName *))handler;
3. Swift OC 混编
  1. OC引用Swift常见问题
    @objc
4. 持续化存储
  1. NSUserDefaults (偏好设置Preference) Preferences
    NSUserDefaults适合存储轻量级的本地数据,支持的数据类型有:NSNumbe (NSInteger、float、double),NSString,NSDate,NSArray,NSDictionary,BOOL,NSData
    NSUserDefault 本地保存的位置是Library/Preferences 这个目录下的 plist 文件。
    使用偏好设置对数据进行保存之后, 它保存到系统的时间是不确定的,会在将来某一时间点自动将数据保存到Preferences文件夹下面,如果需要即刻将数据存储,可以使用[defaults synchronize]; 不可用自定义 因为是plist

  2. Keychain(钥匙串)
    在Capabilities 中打开Keychain
    引入Security 库
    OSStatus SecItem 类增删改查

  3. 文件沙盒 Documents等
    主要存储非机密数据,大的数据,如图片。

存文件的操作步骤如下:
(1). 获得文件即将保存的路径
方法一:

NSArray *documentPaths = 
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,  
NSUserDomainMask,YES);
NSString *ourDocumentPath =[documentPaths objectAtIndex:0];

方法二:

NSString *sandboxPath = NSHomeDirectory();
NSString *documentPath = [sandboxPath
stringByAppendingPathComponent:@"Documents"];

(2). 生成在该路径下的文件

NSString *FileName=[documentDirectory stringByAppendingPathComponent:fileName];//fileName就是保存文件的文件名 

(3). 往文件中写入数据

[data writeToFile:FileName atomically:YES];//将NSData类型对象data写入文件,文件名为FileName

从沙盒中取出文件:
取就比较简单,只需下面一行代码!

NSData data=[NSData dataWithContentsOfFile:FileName options:0 error:NULL];
  1. plist存储 Documents
    即属性列表文件,全名是Property List,这种文件的扩展名为.plist,因此,通常被叫做plist文件。它是一种用来存储串行化后的对象的文件,用于存储程序中经常用到且数据量小而不经常改动的数据。
    可以存储的类型:NSNumber,NSString,NSDate,NSData ,NSArray,NSDictionary,BOOL.
    不支持自定义对象的存储.

NSArray *sandBoxPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [sandBoxPath objectAtIndex:0];
NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"myTestPlist.plist"];
NSLog(@"%@",plistPath);

  1. 归档 (NSKeyedArchiver) Cache
    归档在iOS中是另一种形式的序列化,只要遵循了NSCoding协议的对象都可以通过它实现序列化。由于决大多数支持存储数据的Foundation和Cocoa Touch类都遵循了NSCoding协议,因此,对于大多数类来说,归档相对而言还是比较容易实现的。
    对象归档后将得到一个后缀为.archive的文件,数据就保存在了这个文件中。
  1. 数据库
    SQLite (CoreData FMDB)
    Realm
路径 保存数据特点 iTunes是否同步
Document 适合存储重要的数据 同步
Library/Caches 体积大,不需要备份 不同步
Library/Preferences 应用的设置信息 同步
tmp 临时文件 不同步

简介
优缺点及选择
文件目录简介

5. UITableView初始化过程
1:询问分区个数 numberOfSection
2:询问每个分区的页眉和页脚的预估高度 estimatedSectionHeaderHeight/estimatedSectionFooterHeight
3:询问每个分区cell的个数 numberOfRows
4:询问每个分区cell的预估高度 estimatedRowHeight
5:询问每个分区cell的真实高度 rowHeight
6:询问每个分区cell的边距、样式、编辑状态
7:询问每个分区页脚的真实高度 heightForFooter
8:询问每个分区的cell(自定义cell)cellForRow
9:调用cell即将显示的方法 cellWillDisplay

10:询问每个分区页眉的真实高度 heightForHeader
11:询问每个分区页眉(自定义UIView)viewForSectionHeader
12:调用每个分区页眉即将出现的方法 sectionHeaderWillDisplay
13:询问每个分区页脚(自定义UIView)viewForSectionFooter
14:调用每个分区页脚即将出现的方法 sectionFooterWillDisplay

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