iOS 面试题及答案
面试题集锦
iOS面试题及答案1
iOS面试题及答案2
iOS进阶面试题及答案3
一. CoreAnimation 相关
CABasicAnimation 资料
CoreAnimation(核心动画)概述
iOS面试题及答案2.5
NStimer准吗?谈谈你的看法?如果不准该怎样实现一个精确的NSTimer?
CoreGraphics(核心图形)
它是iOS的核心图形库,包含Quartz2D绘图API接口,常用的是point,size,rect等这些图形,都定义在这个框架中,类名以CG开头的都属于CoreGraphics框架,它提供的都是C语言函数接口,是可以在iOS和mac OS 通用的
QuartzCore
Quartz是位于Mac OS X的Drawin核心之上的绘图层,这个框架感觉不是很清晰,但是看头文件可以发现,它就是CoreAnimation,这个框架头文件只包含了
二. 第三方库
SDWebImage
Github详细资料
缓存策略
AFNetworking/ Alamorefire
三. 设计模式
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;
}
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 混编
- OC引用Swift常见问题
@objc
4. 持续化存储
-
NSUserDefaults (偏好设置Preference)
NSUserDefaults适合存储轻量级的本地数据,支持的数据类型有:NSNumbe (NSInteger、float、double),NSString,NSDate,NSArray,NSDictionary,BOOL,NSData -
plist存储
-
归档 (NSKeyedArchiver)
归档在iOS中是另一种形式的序列化,只要遵循了NSCoding协议的对象都可以通过它实现序列化。由于决大多数支持存储数据的Foundation和Cocoa Touch类都遵循了NSCoding协议,因此,对于大多数类来说,归档相对而言还是比较容易实现的。 -
SQLite (FMDB Realm)
-
CoreData
路径 | 保存数据特点 | iTunes是否同步 |
---|---|---|
Document | 适合存储重要的数据 | 同步 |
Library/Caches | 体积大,不需要备份 | 不同步 |
Library/Preferences | 应用的设置信息 | 同步 |
tmp | 临时文件 | 不同步 |