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.把之前没删除的按时间顺序存起来,按自定义的最大缓存来删除,直到最大缓存一半为止。