ios面试题总结1

本文总结了iOS面试中常见的问题,包括mvc和mvp的区别与优缺点,iOS应用打包后闪退、黑屏的可能原因,Objective-C字典的哈希表实现原理,iOS的消息发送与转发机制,组件间通讯方法,以及SDWebImage的缓存清理和内存警告处理策略。
摘要由CSDN通过智能技术生成

1.mvc和mvp的区别与使用的优缺点

MVP中的V在iOS中指的是ViewController和View。MVP将MVC的ViewController进行拆分:视图数据逻辑处理部分为P,ViewController剩余部分与View合并成V。V和P之间通过Protocol进行通信。

MVP实现了各模块的解藕,具有更好的可测试性。但是总体代码量比MVC大。
另外,iOS MVC更适用于快速开发,即代码规模较小的项目。因此将简单的MVC的Demo改成MVP,反而会显得笨拙。

2.iOS打包成功之后,运行在iPhone上会闪退,黑屏

一种是证书错误,另一种就是当前的设备并不在开发者对应的账号里面。

3.OC的字典实现原理

哈希表:

哈希:1、哈希算法 2、md5 3、SHA1 ...

可以自己写个哈希涵数,把名字 key按 26个首字母进行排序 可以用13个格子进行储存,如果首字母相同的,可以增加一个增量,H=(H(key)+d)Mod m,  d 从1开始计起 模于整个数量m=13,这样做一个增加操作。实际中如果格子里的重复数量越少,代表算法越好。效率越高。

4..iOS中的消息发送机制和消息转发机制的区别

消息发送机制:

OC的函数调用成为消息发送。属于动态调用过程。在编译的时候并不能决定真正调用哪个函数(事实证明,在编 译阶段,OC可以调用任何函数,即使这个函数并未实现,只要申明过就不会报错。而C语言在编译阶段就会报错)。只有在真正运行的时候才会根据函数的名称找 到对应的函数来调用。

消息转发机制:

1.Method resolution 方法解析处理阶段
2.Fast forwarding 快速转发阶段
3.Normal forwarding 常规转发阶段

5.祖件间的通讯 

iOS业界讨论组件化方案甚多,大体来说有3种。

 

  • Protocol注册方案
  • URL注册方案
  • Target-Action runtime调用方案

MGJRoute方案

URL注册方案 蘑菇街 App 的组件化之路 已经说的很清楚了 可以去看下

原理:

通过url注册服务, 其他地方通过url, 获取服务 框架在维护一个url-block的表格

特点:

  • url维护成本高 硬解码
  • 可以在组件内部任何地方调用/注册服务, 没有必要统一组件接口服务
  • 每个业务组件, 都需要依赖这个框架

6.SDWebImage是怎么来清理缓存的?

1.根据时间顺序来删除,7天过期删除掉。

2.把之前没删除的按时间顺序存起来,按自定义的最大缓存来删除,直到最大缓存一半为止。

缓存计算,它的单位为字节

[[[SDWebImageManager sharedManager] imageCache]getSize];

缓存图片的数量

[[[SDWebImageManager sharedManager] imageCache] getDiskCount];

缓存清理,第一种是内存缓存,第二种是硬盘缓存

[[[SDWebImageManager sharedManager] imageCache] clearMemory];  
[[[SDWebImageManager sharedManager] imageCache] clearDisk];

7.SDWebImage是怎么处理接收的内存警告的?

AutoPurgeCache 继承自 NSCache 自动清除缓存,调用NSCache 的 removeAllObjects方法。

8.SDWebImage中怎么计算图片的成本大小?

缓存大小

/**
 * Get the size used by the disk cache
 */
- (NSUInteger)getSize;
// 注意:返回值单位为字节
// 具体实现
- (NSUInteger)getSize {
    __block NSUInteger size = 0;
    dispatch_sync(self.ioQueue, ^{
        NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtPath:self.diskCachePath];
        for (NSString *fileName in fileEnumerator) {
            NSString *filePath = [self.diskCachePath stringByAppendingPathComponent:fileName];
            NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil];
            size += [attrs fileSize];
        }
    });
    return size;
}

9.SDWebImage中clear和clean有什么样的区别?
 

clear

   全部删除

clean

   部分删除 

  1.根据时间顺序来删除,7天过期删除掉。

   2.把之前没删除的按时间顺序存起来,按自定义的最大缓存来删除,直到最大缓存一半为止。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值