IOS专辑面试题库

iOS 面试题及答案

2018-07-24  本文已影响257人  JaiUnChat

面试题集锦

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

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)
    NSUserDefaults适合存储轻量级的本地数据,支持的数据类型有:NSNumbe (NSInteger、float、double),NSString,NSDate,NSArray,NSDictionary,BOOL,NSData

  2. plist存储

  3. 归档 (NSKeyedArchiver)
    归档在iOS中是另一种形式的序列化,只要遵循了NSCoding协议的对象都可以通过它实现序列化。由于决大多数支持存储数据的Foundation和Cocoa Touch类都遵循了NSCoding协议,因此,对于大多数类来说,归档相对而言还是比较容易实现的。

  4. SQLite (FMDB Realm)

  5. CoreData

路径 保存数据特点 iTunes是否同步
Document 适合存储重要的数据 同步
Library/Caches 体积大,不需要备份 不同步
Library/Preferences 应用的设置信息 同步
tmp 临时文件 不同步

资料

上一篇下一篇

猜你喜欢

热点阅读