ag真人UI控件基本介绍,腾讯一面以及参考思路

2019-09-11 16:07栏目:专项工作
TAG:

下面要说的是关于控件在它们功能上的分类,大多数会这样去区分控件:活动控件,静态控件,被动控件。

安装CocoaPods如下步骤:

欢迎加入iOS交流群2466454,大家互相交流学习!

腾讯二面点击查看

腾讯三面点击查看

1.使用了第三方库, 有看他们是怎么实现的吗?

2.强连通量算法了解嘛?

3.遇到tableView卡顿嘛?会造成卡顿的原因大致有哪些?

4.M、V、C相互通讯规则你知道的有哪些?

5.NStimer准吗?谈谈你的看法?如果不准该怎样实现一个精确的NSTimer?

>> a. 活动控件
1. 查看当前ruby版本的命令:ruby -v(Mac自带ruby环境,所以不需要进行相关安装的操作)
若是需要安装ruby版本的话,则输入命令:rvm install x.x.x

1.使用了第三方库, 有看他们是怎么实现的吗?

>>> 很简单,它是代表一系列可以“活动”的控件,指可接收与用户的交互,这类控件会响应用户最基本的手势操作,点击、触摸等操作;当控件被操作时,可以激发控件“绑定”的相应的事件,从而达到开发者所想要呈现的效果。
2. 需要更换ruby镜像,由于目前淘宝源停止更新了所以不用它了,需要进行替换成ruby-china源
1)、检查当前镜像命令:gem sources -l
2)、移除当前镜像命令:gem sources--remove
3)、更新新的镜像命令:gem sources -a
4)、重复第一步检查是否安装成功,若源已替换则成功,若未替换则重复上述移除更新源的操作。

例:SD、YY、AFN、MJ等!

<1>.SD为例:

1.入口 setImageWithURL:placeholderImage:options:

会先把 placeholderImage 显示,然后 SDWebImageManager 根据 URL 开始处理图片。

2.进入 SDWebImageManagerdownloadWithURL:delegate:options:userInfo:,

交给 SDImageCache 从缓存查找图片是否已经下载 queryDiskCacheForKey:delegate:userInfo:.

3.先从内存图片缓存查找是否有图片,

如果内存中已经有图片缓存,SDImageCacheDelegate 回调 imageCache:didFindImage:forKey:userInfo: 到 SDWebImageManager。

4.SDWebImageManagerDelegate 回调 webImageManager:didFinishWithImage:

到 UIImageView+WebCache 等前端展示图片。

5.如果内存缓存中没有,生成 NSInvocationOperation

添加到队列开始从硬盘查找图片是否已经缓存。

6.根据 URLKey 在硬盘缓存目录下尝试读取图片文件。

这一步是在 NSOperation 进行的操作,所以回主线程进行结果回调 notifyDelegate:。

7.如果上一操作从硬盘读取到了图片,将图片添加到内存缓存中

(如果空闲内存过小,会先清空内存缓存)。

SDImageCacheDelegate 回调 imageCache:didFindImage:forKey:userInfo:。

进而回调展示图片。

8.如果从硬盘缓存目录读取不到图片,

说明所有缓存都不存在该图片,需要下载图片,

回调 imageCache:didNotFindImageForKey:userInfo:。

9.共享或重新生成一个下载器 SDWebImageDownloader 开始下载图片。

10.图片下载由 NSURLConnection 来做,

实现相关 delegate 来判断图片下载中、下载完成和下载失败。

11.connection:didReceiveData: 中

利用 ImageIO 做了按图片下载进度加载效果。

12.connectionDidFinishLoading: 数据下载完成后交给 SDWebImageDecoder 做图片解码处理。

13.图片解码处理在一个 NSOperationQueue 完成,

不会拖慢主线程 UI。如果有需要对下载的图片进行二次处理,

最好也在这里完成,效率会好很多。

14.在主线程 notifyDelegateOnMainThreadWithInfo:

宣告解码完成,

imageDecoder:didFinishDecodingImage:userInfo:

回调给 SDWebImageDownloader。

15.imageDownloader:didFinishWithImage:

回调给 SDWebImageManager 告知图片下载完成。

16.通知所有的 downloadDelegates 下载完成,

回调给需要的地方展示图片。

17.将图片保存到 SDImageCache 中,

内存缓存和硬盘缓存同时保存。

写文件到硬盘也在以单独 NSInvocationOperation 完成,

避免拖慢主线程。

18.SDImageCache 在初始化的时候会注册一些消息通知,

在内存警告或退到后台的时候清理内存图片缓存,

应用结束的时候清理过期图片。

19.SDWI 也提供了 UIButton+WebCache 和

MKAnnotationView+WebCache,方便使用。

20.SDWebImagePrefetcher 可以预先下载图片,

方便后续使用。

>>b. 静态控件
出现 CURRENT SOURCES 即是安装ruby sources成功。

2.强连通分量了解嘛?

>>> 静态控件可以理解为就只是用于显示应用的某种状态或者某个视图,用户不会通过静态控件执行任何的操作,如UILabel控件就只是显示文字,而UIImageView仅仅展示图片(不过这里加上一点,其实静态控件也不完全是不能用任何操作的,比如说我们可以加上触摸的手势或者toucheBegan等类似的响应方法)
1. 安装cocoapods
输入命令$: sudo gem install cocoapods 

概念:

有向图强连通分量:在有向图G中,如果两个顶点vi,vj间有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly

connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量(strongly

connected components)。

定义:

有向图强连通分量:

在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected)。

如果有向图G的每两个顶点都强连通,则称G是一个强连通图。

非强连通图有向图的极大强连通子图,成为强连通分量(strongly connected components)。

下图中,子图{1,2,3,4}为一个强连通分量,因为顶点1,2,3,4两两可达,{5},{6}也分别是两个强连通分量。

>>c. 被动控件
2. 升级cocoapods
$:sudo gem update cocoapods 

ag真人 1

>>> 被动控件其实往往就是用于接受用户输入的值,并不会激发任何的事件方法和事件响应,如UITextField的文本框输入控件。
3. 最后安装,使用pod操作
$:pod setup 

直接根据定义,用双向遍历取交际的方法求强连通分量,时间复杂度为O。更好的方法是Kosaraju算法或者Tarjan算法。

两者的时间复杂度都是O。本文介绍的是Tarjan算法。

算法原理:

need-to-insert-img

Tarjan算法是基于对图深度优先搜索的算法,每个强连通分量为搜索树中的一颗子树。

搜索时,把当前搜索树中未处理的节点加入一个堆栈,回溯时可以盘对栈顶到栈中的节点是否为一个强连通分量。

定义DFN为节点u搜索的次序编号。Low为u或者u的子树能够追溯到的最早的栈中的节点的次序号。

由定义可以得出:

Low= Min { DFN, Low} 为树枝边,u为v的父节点DFN为指向栈中节点的后向边

当DFN时,以u为根的搜索子树上所有节点是一个强连通分量。

下面给出的分类是我自己根据平时的使用频率进行的总结
>>>如果上面的操作都失败了都不行,试试更新gem
 $:sudo gem update --system

3.遇到tableView卡顿嘛?会造成卡顿的原因大致有哪些?

版权声明:本文由ag真人发布于专项工作,转载请注明出处:ag真人UI控件基本介绍,腾讯一面以及参考思路