日常问题总结,有些问题面会广一点,便单独拿出来写一篇;
1、GCD与NSOperationQueue的区别;
Grand Central Dispatch(GCD) 是 Apple 开发的一个多核编程的较新的解决方法。它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统。
NSOperation是常见的多线程方案,是对GCD的封装,采用OC方法,更加面向对象。
主要区别:
- GCD是纯C语言的API ,NSOperationQueue是基于GCD的OC的封装;
- GCD只支持FIFO队列(先进先出队列),NSOperationQueue可以方便设置执行顺序,设置最大的并发数量;
- NSOperationQueue可是方便的设置operation之间的依赖关系,GCD则需要很多代码;
- NSOperationQueue支持KVO,可以检测operation是否正在执行(isExecuted),是否结束(isFinishe),是否取消(isCanceled);
- GCD的执行速度比NSOperationQueue快。
2、SDWebImage主要有哪些类;实现原理;自己写一个类似组件解析的思路;
3、本地有一个存储整型数据、2G大小的文件,如何实现将其按大小排序并存储于200M的内存中;
4、查找到view1、view2的共同父视图;
- (UIView *)getCommonSuperViewWithFirstView:(UIView *)firstView secondView:(UIView *)secondView {
UIView *commonSuperView = nil;
UIView *firstSuperView = firstView;
while (!commonSuperView && firstView && secondView) {
UIView *secondSuperView = secondView;
while (!commonSuperView && firstSuperView && secondSuperView) {
if (secondSuperView == firstSuperView) {
return secondSuperView;
}
secondSuperView = secondSuperView.superview;
}
firstSuperView = firstSuperView.superview;
}
return commonSuperView;
}
5、AFNetworking主要有哪些类,熟悉源码实现;
NSURLSession:AFHTTPSessionManager、AFURLSessionManager;
Reachability:AFNetworkReachabilityManager
Security:AFSecurityPolicy
Serialization:AFURLRequestSerialization、AFURLResponseSerialization
6、runtime应用场景,数据类型转换中的应用解析(即如何实现);
7、多线程有哪些锁的种类?及其应用;
8、http请求上传文件的过程解析;
9、数据库索引定义有哪些规则?
10、如何实现组件化业务库之间的解耦?
11、runloop与定时器的使用?定时器在tableView滑动时会怎样?如何解决?
问题答案已在单独一篇中提及,此处贴一下:iOS定时器的添加方式
12、24种设计模式知道哪些?工厂模式的特点;
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。总体来说设计模式分为三大类:
-
创建型模式
简单工厂模式、工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 -
结构型模式:
适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 -
行为型模式
策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
13、线上版本的崩溃如何去定位?
通过查看crash log去定位;
1、针对线上版本,可通过 iTunes Connect -> APP 分析 查看crash log;
2、自己手机安装、操作、crash,连接xcode查看crash log;
3、集成搜集崩溃日志的第三方,如Bugly、Fabric等;
14、工程中使用到的数据持久化的方式;
plist 文件存储;sqlite 数据库存储;NSUserDefaults;
15、分类(Category)与扩展(Extension)的区别;
分类(Category)的作用
- 可以为已知的类添加方法,哪怕是你没有源码的类;
- 通过类目添加方法会成为原始类的一部分,调用与其他方法一致;
- 与原类中的方法同级;
- 在父类中添加类目子类会继承该类目中的方法,但在子类中添加类目父类无法拥有这些方法;
分类(Category)注意点 - 不能在类目中添加实例变量;
- 可以为同一类添加多个类目,但类目名和方法名不能重复;
- 如果添加的方法和系统重名,优先实现类目中的方法,因此,不能随意重写类的方法;
分类(Category)的局限性 - 无法向类中添加实例变量,如果需要添加实例变量则只能在子类中添加;
- 如果在类目中重写父类方法,可能导致super消息的断裂,因为在类目中的方法优先级高于父类。
扩展(Extension) - Extension中添加的属性、成员变量和方法属于私有属性和方法,必须要在相应类的主要@implementation代码块被实现;
- 类扩展只能针对自定义的类,不能给系统类增加类扩展。
- Extensions增加的方法如果与类的方法同名,会冲突报错。
16、自定义UICollectionViewFlowLayout的实现方式;
网友评论