返回上级目录:iOS面试专题一

文章目录

  • 1.AFNetworking: iOS客户端的第三方网络框架
    • 源码解析
      • dataTask
  • 2.SDWebImage:一个异步下载图片并且支持缓存的框架
    • 问:怎样设计一个图片缓存框架,框架/架构章节,高级资深iOS
  • 3.ReactiveCocoa(RAC)
    • 3.1 信号
    • 源码解析
      • RACSignal.m
      • RACDynamicSignal.m
      • RACReturnSignal.m
    • 3.2 订阅: RACSubscriber
      • 源码分析
  • 4.AsyncDisplayKit:提升iOS界面渲染性能的一个框架
  • 面试总结

1.AFNetworking: iOS客户端的第三方网络框架

AFNetworking - Github

  • UIKit集成模块:UIKit原生控件分类的添加
  • 核心类 :AFURLSessionManager
  • AFHTTPSessionManager: 继承自AFURLSessionManager的子类
  • AFSecurityPolicy: 网络安全,网络证书的校验,公钥的一些验证
  • AFNetworkReachabilityManager: 网络连接监听
  • NSURLSessionDelegate: 重定向,认证挑战的处理

源码解析




  • key-value参数序列化

dataTask





2.SDWebImage:一个异步下载图片并且支持缓存的框架

iOS-SDWebImage史上最详细介绍

问:怎样设计一个图片缓存框架,框架/架构章节,高级资深iOS

SDWebImage - Github

  • UIImageView的分类
  • 核心类: SDWebImageManager

  • 图片对应的key

3.ReactiveCocoa(RAC)

ReactiveCocoa - Github


  • 继承自RACStream,RACStream有几个方法empty,return… 这些函数都是抽象函数,我们不能直接使用。在此之上,RACStream的分类,operation中提供了比较实用的具体的方法,如:map,take… 。上面的函数(map)是对下面抽象函数(empty)的不同的组合逻辑,就产生了这么多的其他功能。我们对不同的RACSignal(RACDynamicSignal,RACReturnSignal),他们有empty,return,bind方法的具体实现。调用不同信号的map,take方法,产生的是不同的功能逻辑。而这些都是基于这些抽象方法,所产生的一些更具备功能性的一些函数

3.1 信号

  • 由1切到2状态
  • 什么是信号? 他是代表一连串的状态这么样的一个类的封装,具体涉及到RACSignal有不同的子类

源码解析

RACSignal.m

  • createSignal方法返回的是一个具体的子类RACDynamicSignal,但是对于我们外界使用来说看到的都是RACSignal
  • 实际上RAC函数响应式编程,这里涉及到一个非常重要的设计模式“类簇设计模式”。我们通过这种方法创建的信号,或者说理解为工厂,或者说抽象工厂。那么返回的对象都是一个抽象的对象。但实际上是通过不同的方法创建出来的具体对象也不同

RACDynamicSignal.m

  • 动态信号(RACDynamicSignal),createSignal的实现,实际上就是把传递进来的block参数(didSubscribe),作为信号的一个成员变量,保存下来,然后就进行一个简单的返回,当然这里也设置了一个信号的名称的标识

RACReturnSignal.m


3.2 订阅: RACSubscriber

  • 成员变量持有block: didSubscribe
  • 执行内部保存的block

源码分析

  • 打印: 3
  • RACReturnSignal.m
  • RACSignal.m
  • RACSubscriber.m
  • RACSubscriber.m

4.AsyncDisplayKit:提升iOS界面渲染性能的一个框架

AsyncDisplayKit - Github

  • 今日头条,新浪微博
  • 减轻主线程的压力,能挪到子线程就挪到子线程
  • 把下面要处理的问题放在子线程
  • UIView是CALayer的delegate, CALayer是UIView的一个成员变量
  • ASNode的成员变量.view UIView的成员变量.node

面试总结

  • SDWebImage: 图片缓存删除的策略: 最近最就未使用的算法LRU(Least Recently Used)的运用
  • ASDK: 封装了一个ASNode结点,对视图属性的设置都转成对ASNode的设置,这一部分可以放在后台线程中去实现。然后我们在合适的时机,也就是runloop快要结束的时候,接收通知,提取全局容器中对应的ASNode,然后在一次性设置给UIView

iOS面试 第三方库相关推荐

  1. iOS 常用第三方库及插件

    //菜单切换 https://github.com/pujiaxin33/JXCategoryView //各种导航栏样式 https://github.com/rickytan/RTRootNavi ...

  2. iOS CocoaPods第三方库加载本地文件或服务器上的zip文件(二)

    本篇文章重点介绍,如何加载zip文件压缩包第三方库.如果伙伴们想了解如何加载本地文件请自行翻看上篇文件. 方案: 不废话,直接上代码!编辑我们的WechatOpenSDK.podspec文件: Pod ...

  3. iOS常用第三方库大全,史上最全第三方库收集

    下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITableVie ...

  4. IOS常用第三方库《转》

    UI 动画 网络相关 Model 其他 数据库 缓存处理 PDF 图像浏览及处理 摄像照相视频音频处理 响应式框架 消息相关 版本新API的Demo 代码安全与密码 测试及调试 AppleWatch ...

  5. iOS 开发第三方库全集

    下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITableVie ...

  6. Mac安装ruby环境及Xcode安装cocoapods整体流程--ios引用第三方库的环境准备

    发文原由:ios刚用来开发不久,需要在开发时引用第三方库,百度查找了资料,需要先安装ruby环境,再进行cocoapods安装 一.mac安装ruby环境 (引用博客–https://www.cnbl ...

  7. iOS常用第三方库汇总

    一:第三方插件 1:基于响应式编程思想的oc 地址:https://github.com/ReactiveCocoa/ReactiveCocoa 2:hud提示框 地址:https://github. ...

  8. iOS常用第三方库之Masonry

    有更新,请往最下边查看. 一.前言 关于苹果的布局一直是我比较纠结的问题,是写代码来控制布局,还是使用storyboard来控制布局呢?以前我个人开发的时候很少使用代码去写约束,因为太麻烦了.所以最终 ...

  9. 【iOS高级资深工程师面试篇】⑫、2022年,金九银十我为你准备了《iOS高级资深工程师面试知识总结》 第三方库部分 AFNetworking-SDWebImageView-ReactiveCocoa

    iOS高级资深工程师面试篇系列 - 已更新3篇 UI部分1/3 -UITableView-事件传递&视图响应 UI部分2/3 -图像显示原理-UI卡顿&掉帧 UI部分3/3 -UIVi ...

  10. iOS 常用的几个第三方库

    网络通信 1.ASIHTTPRequest 这是一个经典的老库,功能完全而强大,但已经停止更新很久了(iOS5.0停止更新,但是我最近看github上这个项目有新改动).在不同iOS版本上略微有一些小 ...

最新文章

  1. javafx官方文档学习之二Scene体系学习一
  2. 缓存 Memached
  3. Pycharm中Python3连接Oracle
  4. python3安装步骤
  5. vs 构建linux 项目,使用Linux上的Mono构建VS 2017 MSBuild csproj项目
  6. c++ 绘制函数图像_图像轮廓和分水岭算法
  7. MFC中的几个常用类——CFileDialog
  8. 蓝桥杯2016年C/C++ 混搭
  9. vue动态添加style样式
  10. 奇安信RSA观察|RSAC应用安全技术新风向
  11. USACO 2.1 海明码(DFS)
  12. 拓端tecdat|R语言解释生存分析中危险率和风险率的变化
  13. layui 监听表单提交form.on(‘submit(sub)‘,function (){}) ajax请求失败问题
  14. 学习Java技术Eclipse版本的选择
  15. 技嘉主板bios设置方法
  16. GD32F103快速替换STM32F103
  17. linux禁止程序访问网络,linux内核强制访问控制--Apparmor
  18. 花生壳 内网穿透配置
  19. 2021-1-1今日新闻简报 每天精选12条最新时事热点新闻摘要和1条微语
  20. redis的雪崩和穿透

热门文章

  1. html插入视频快捷键代码,pr添加关键帧的快捷键是什么?
  2. win10自带输入法突然变成了繁体
  3. onenote笔记本关闭了就打不开问题 onenote正在清理上次打开之后的内容 的多个解决方法
  4. elixir元编程的quote与unquote
  5. 谷歌浏览器任务栏图标变为白色如何快速解决
  6. 2022.10.25 固体物理
  7. 计算机显存影响什么,纯干货!显存大小究竟有什么用?
  8. 大数据具体是干什么的
  9. 【黑盒测试用例设计方法5】正交试验法及其示例
  10. Java 相关知识的学习(第一章至第三章)