把当前的控制器作为一个父控制器,添加三个UITableViewController的实例作为子控制器,把父控制器中的 scrollView 作为容器,然后添加子控制器中的 tableView 作为子视图...这样做有一个问题,一旦有十几二十个表的话,内存就要爆炸了。解决的办法是可以自己写个重用机制,不过这显然没必要,用自带重用机制的UICollectionView应该是个更好的选择。...pagingEnabled = true collectionView?.bounces = false 这样滑动的时候就会有翻页的段落感,滑到边界的时候也不会有回弹效果。...因为这边只是个 Demo,所以我直接在 cell 中显示cellData的值,那cellData 的值在哪里设置呢?...这边 cell 是会被复用的,在翻到第三页时,会复用第一页的 cell ,第四页复用第二页的 cell……依此类推,所以需要给 cell 中的tableView调用 reloadData方法,不然就算改变了表中的数据
子 View 的顺序和子 View 返回的数组中的位置有关(storyboard 中左侧的树形结构图中的先后顺序)。...// 纯代码实现复用 // 去重用池子中找cell var cell = tableView.dequeueReusableCell(withIdentifier:...*/ // SB方式实现复用 let cell = tableView.dequeueReusableCell(withIdentifier: "abc")...直接在 storyboard 中布局,不需要使用数据源方法,但如果需要使用到代理方法,仍然需要在控制器中实现相应的方法。 适用于基本不需要动态修改、布局固定的页面,如个人中心、设置等。...微信“发现”界面案例。
MJRefresh是很好用的一个刷新控件,但是如果在每个ViewController中都加入如下代码 self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingBlock...footerWithRefreshingBlock:^{ //Call this Block When enter the refresh status automatically }]; 代码复用性不高...MJRefresh 支持TableView,CollectionView,Scrollview,很容易联想到TableView,CollectionView都是继续Scrollview,那我们写一个Scrollview...的Category是不是就可以 接下来我们需要考虑两个问题,Category是不可以直接添加属性的,那我们怎么添加Page和刷新Block这两个属性。...所以我们在Category中声明属性 typedef void(^RefreshBlock)(NSInteger pageIndex); typedef void(^LoadMoreBlock)(NSInteger
Atlas-iOS - 快速在iOS里集成聊天功能,类似开源版本的环信。Layer家开源了一套聊天app界面的解决方案.看起来很赞,很多蛮复杂的东西直接都帮封好了。...ZYThumbnailTableView.swift - 可展开型预览TableView,开放接口,完全自由定制。...实现教程 jingDongFenLei - 简单仿写京东分类中的多级分类页面。...WHC_CollectionViewFramework.swift - 高仿支付宝可拖拽排序编辑动画效果cell的CollectionView集合视图。...SwipeViewController.swift - 一款好用的页面滑动和标签选项卡类库及示例。
当用户滑动不是很快的时候,还感觉不出来卡顿,当用户大幅度滑动,整个UICollectionView的卡顿就很明显了。如果整个cell的DataSource又是从网络加载的,那就更加卡顿了。...接下来我们就来详细的说说掉帧的问题。 当今的用户是很挑剔的,用户需要一个很顺滑的体验,只要有一点卡顿,很可能一言不合就卸载app了。要想用户感觉不到卡顿,那么我们的app必须帧率达到60帧/秒。...我们用图标来分析一下掉帧的问题。下面会出现2种不同的帧。 第一种情况,下图是当用户轻微的上下小幅度滑动。...最后,用cancelPrefetchingAPI去迎合用户的滑动动作的变换,比如说用户在快速滑动突然发现了有趣的感兴趣的事情,这个时候停下来滑动了,甚至快速反向滑动了,或者点击了事件,进去看详情了,这些时刻我们都应该开启...如果flow layout可以用数学的方法动态的计算布局,而不是根据我们给的size去布局,那会是件很酷的事情。 iOS 10中就引入了新的API来解决上述的问题。
在modern collectionview 中也引入了新的DiffableDataSource的概念,我们不再需要设置Datasource通过一系列数据源方法返回,而是通过一开始的绑定,通过snapshot...也就意味着collectionView可以做UItableView的事情了(不再需要UItableView),同样,该样式还支持左滑删除等tableview的特色属性。...总结出整体的大趋势是 去TableView化、推动DiffDataSource和支持更复杂的布局样式。...,特别是在卡顿方面的监控,是不是与用户的感知相一致,也是一个需要研究的问题。...WWDC20专门讲解了如何使用Xcode12中的Metal调试和性能优化工具找到图形问题 Discuss WWDC20 Session 10605 - Gain insights into your Metal
---- 华丽分割线 ---->那如何回答这个问题!...主队列的异步执行 具体用法:实现图片轮播功能时,设置viewWillAppear 与 数据源方法的执行顺序问题!...-->用放大数倍数据源的方式(比如50倍),使用collectionView 的良好复用性,实现广告图片的无限轮播。 ?...主队列异步执行--执行顺序的改变 如图,我们会发现,tableView Delegate的方法,竟然走在了viewWillAppear 方法的前面!...用这种方法,我们可以先设置tableView cell的count,再在viewWillAppear中实现滚动,可以完美实现 --> 广告图片无限轮播效果~ ---- 如图有小白想知道,如何用collectionView
看看我们日常常见的 App,新闻类的今日头条,社交类的微博和微信,电商类的淘宝、腾讯,日常管理用的备忘录和图片 App 的缩放功能,都或多或少得使用了 UIScrollView 及其子类。...所以我们将同一类型的 UITableViewCell 标记为相同的 Identifier,然后用reuseIdentifier 去进行构建,配合不同内容进行批量使用。...否则每次滑动,UITableView 都会重新生成一个新的 UITableViewCell,这样极其浪费资源,而且容易造成主线程卡顿。 3....首先检查 UITableViewCell 是否进行了复用。对于复杂视图的创建,可以采用惰性加载来推迟创建时间。尽量减少视图层级也是很好的优化方法。...prepare() 完成布局之后该方法被调用,它决定了哪些 item 在 CollectionView 给定的区域内可见。我们只要取交集(intersect)即可。
虽然抛弃UITableView是不存在的,但是看完这篇文章确实能让90%的列表页抛弃UITableView,让界面易实现易复用。...reload这一行,在heightForRow代理方法中判断isExpand,返回小明已在FeedCellModel中已经计算的两个高度(初始高度和全部高度)。...很好,目前为止,两个需求都非常快速完美的完成了。 第三个需求:图片展示 只有文字可太单调了,俗话说没图说个jb?...CollectionView 中的一个 section 中的 cell。...协议来提供数据 ///返回要在collectionView中显示的所有数据 func objects(for listAdapter: ListAdapter) -> [ListDiffable]
如果对象可以复用,并且复用的代价比释放、创建新对象要小,那么这类对象应当尽量放到一个缓存池里复用。 对象调整 对象的调整也经常是消耗 CPU 资源的地方。...文本计算 如果一个界面中包含大量文本(比如微博微信朋友圈等),文本的宽高计算会占用很大一部分资源,并且不可避免。...当在较短时间显示大量图片时(比如 TableView 存在非常多的图片并且快速滑动时),CPU 占用率很低,GPU 占用非常高,界面仍然会掉帧。...视图的混合 (Composing) 当多个视图(或者说 CALayer)重叠在一起显示时,GPU 会首先把他们混合到一起。如果视图结构过于复杂,混合的过程也会消耗很多 GPU 资源。...这时可以使用 stat 代替 NSFileManager,直接获取文件属性: 参考资料 微信读书 iOS 性能优化总结 iOS实时卡顿监控 iOS 保持界面流畅的技巧
如果对象可以复用,并且复用的代价比释放、创建新对象要小,那么这类对象应当尽量放到一个缓存池里复用。 对象调整 对象的调整也经常是消耗 CPU 资源的地方。...文本计算 如果一个界面中包含大量文本(比如微博微信朋友圈等),文本的宽高计算会占用很大一部分资源,并且不可避免。...当在较短时间显示大量图片时(比如 TableView 存在非常多的图片并且快速滑动时),CPU 占用率很低,GPU 占用非常高,界面仍然会掉帧。...ASDK 有个 Feed 列表的 Demo:SocialAppLayout,当列表内 Cell 过多,并且非常快速的滑动时,界面仍然会出现少量卡顿,我谨慎的猜测可能与这个问题有关。...在这个预设内,你能查看到几乎所有与显示有关的数据,比如 Texture 数量、CA 提交的频率、GPU 消耗等,在定位界面卡顿的问题时,这是最好的工具。 参考:iOS 保持界面流畅的技巧
你可以通过 AsyncDisplayKit 的力量来解决这个问题 ASDisplayNode 简介 ASDisplayNode 是ASDK的核心类,它只是一个类似于 MVC 中的 “View” 一样的UIView...没有必要担心Cell的复用以及初始化一个Cell的方法。您可能会注意到您现在返回了CardNode,而不是CardCell。 这让我想到一个重要的点。...image.png 真是一个流畅的 tableView!一旦你开始做了,那就让我们做的更好吧! 无限滚动 在大多数应用中,服务器的数据点的个数往往会多于当前 tableView 中显示的单元格数量。...假设你有一个竖直滚动的tableView,在其中某些Cell包含了水平滚动的 collectionView。...来到二次元 现在,你已经有了完整的 AnimalTableController, 你可以把它做为 ASPagerNode 的一个page。
TableView优化之快速滑动下的忽略加载 系列文章: TableView优化之高度缓存功能 TableView优化之加载图片的优化逻辑 TableView优化之快速滑动下的忽略加载 ---- 最近在搞什么...objectAtIndex:indexPath.row]; cell.selectionStyle = UITableViewCellSelectionStyleNone; //清除cell内容,解决复用问题...首先他cell调用了clear方法,这是VVeboTableViewCell中作者自己实现的方法,用于清除cell上面展示的内容,这样可以避免因cell重用而导致没有绘制的cell会显示之前的内容的问题...然后是判断needLoadArr中是否包含有当前indexPath,若没有返回。继续判断当前TableView是否处于快速回到顶部的过程中,如果是的话也不绘制。...当然了这部分内容不是对性能的优化,而是对代码的优化。 天天写TableView里面的代理是不是很烦人啊,千篇一律又不能不写。所以想一个方法只写一次以后拿来直接用吧=。= 效果图 真机不卡!真机不卡!
这个呢其实没什么可多说的,无非是新建一个类用作用户界面,将一个复杂子系统中的类组合起来,对外提供一个易用的高层接口,隐藏内部细节。这里蕴含分层的思想,可以让系统模块化程度更高,便于复用,也便于使用。...享元(Flyweight) 享元模式运用共享技术有效地支持大量细粒度的对象。...比如 TableView 和 CollectionView 中 Cell 的重用机制,就是运用享元模式的一大典范。...说到这里想必大家也明白享元模式的作用了,对的,就是为了节约内存。...套用公式并不能解决所有问题,所以大家在学习设计模式的时候还是要多学习它的设计思路,知道每个模式是针对什么场景设计的,这样设计的好处与弊端,它具体是怎么实现的,场景变化的时候可以做怎样的变通,等等。
没抱太大希望的给我过了。中间由于手机停机了(自己没发现),hr还加了我微信约二面(被感动!!),17号二面全程被虐(听说面试官是抖音那边转到这个部门的)。。幸好最后算法题也写出来了,也让过了。...现在给定b 求a 二面 45分钟 自我介绍 项目 15分钟 加载图片卡顿是为什么 有哪些优化方案 图片解码时机 设计os的复制粘贴 假如现在有一个可以需要在三维中写字并输出结果的课题 怎么做这个课题 你的思路...算法题 数字转汉字 阿里 2020年 2-17 电话一面 自我介绍 栈和堆的区别 各种排序算法比较(冒泡、快速排序、归并排序、桶排序、计数排序) 数组、链表、哈希表优缺点 uiview与calayer...的联系与区别 为什么uiview可以响应事件 tableview的重用机制以及与collectionview的区别 cpu和gpu的区别 离屏渲染 mvvm与mvc 项目亮点 野指针处理 内存管理 深拷贝与浅拷贝...解决循环引用又出什么问题 13.循环引用出现的常见情况 14.autoreleas谈谈 15.timer为什么在子线程中不工作 16.为什么学iOS 2-25 二面 二面 17分钟 自我介绍 实习多久、
Atlas-iOS - 快速在iOS里集成聊天功能,类似开源版本的环信.Layer家开源了一套聊天app界面的解决方案。看起来很赞,很多蛮复杂的东西直接都帮封好了。...该项目通过三种形式展示页面之间的切换,比如导航栏上的多个选项卡切换,页面左右两端箭头指示切换,以及使用分段控件。...ZYThumbnailTableView.swift - 可展开型预览TableView,开放接口,完全自由定制。...WHC_CollectionViewFramework.swift - 高仿支付宝可拖拽排列编辑动画效果cell的CollectionView集合视图。...LeeGo.swift - 带来更声明式的,可配置的和易复用的UI开发方式,让UI开发变得像玩乐高积木一样简单直观,某种程度上取代ComponentKit。
打算在项目中大面积使用RAC来开发,所以整理一些常用的实践范例和比较完整的api说明方便开发时随时查阅 声明式编程泛型Declarative programming 函数反应式编程是声明式编程的子编程范式之一...subscribeNext:^(id x) { //3 NSLog(@"subscribeNext - %@", x); }]; } 上面的RACObserve会引起引用不释放的问题...RACEmptySignal :空信号,用来实现 RACSignal 的 +empty 方法; RACReturnSignal :一元信号,用来实现 RACSignal 的 +return: 方法; RACDynamicSignal...RACSequence RAC中的集合类 RACCommand RAC中用于处理事件的类,可以把事件如何处理,事件中的数据如何传递,包装到这个类中,他可以很方便的监控事件的执行过程。...RACScheduler RAC中的队列,用GCD封装的。
如果不使用可复用的 tableViewCell ,我们必须为每一行创建一个新的 tableViewCell,如下所示: func tableView(_ tableView: UITableView,...如果你快速滚动表视图,期间会动态分配许多小块内存,这个过程将使 UI 变得卡顿!...iOS 中 tableViewCell 复用队列图解(查看大图) 通过使用队列来存储 tableViewCell,表视图中不需要创建一千个tableViewCell。...请记住,当应用程序被用户强行关闭时,操作系统将删除已保存的状态,避免在状态保存和恢复时出现问题。...如果视图具有透明度(即 alpha 低于 1.0),那么 iOS 将需要做些额外的工作来混合视图层次结构中不同的视图层以计算出哪些内容需要展示。
△图源:微博 这两天,一位数码博主在网上曝出的这件“隐私问题”成为了焦点。 毕竟很多人每天都离不开微信,可以是说与大多数人利益相关了。...并且微信还补充解释道,这样的操作是为了方便用户在微信聊天中按“+”时可以快速发图。 但经此事发酵之后,微信表示会在最新版本中取消这样的操作,优化快速发图功能。 相册是如何被“偷窥”的?...而在后续的发现中,有如此行径的还不止微信这一家。 就连QQ、淘宝等多款国产 App 均存在后台频繁读取用户相册的行为。...博主以微信为例,很贴心的给出了如下的tips: 进入 设置 > 下拉找到「微信」 > 相册 > 将「所有照片」改为「选中的照片」或「不允许」 在同设置页面, 关闭「后台 App 自动刷新」开关 在同设置页面...6大奖项锁定AI TOP企业 「2021中国人工智能年度评选」报名中!本次评选将从公司、人物、产品三大维度寻找优秀的AI企业,欢迎大家扫码报名参与。
所以,在使用 Method Swizzling 的时候,应该保持足够的谨慎。 例如,你在一个类中重写一个方法,并且不调用 super 方法,则可能会出现问题。...所以被用于 Method Swizzling 的方法必须是当前类自身的方法,如果把继承父类来的 IMP 复制到自身上面可能会存在问题。...、CollectionView 异常加载占位图 在项目中遇到网络异常,或者其他各种原因造成 TableView、CollectionView 数据为空的时候,通常需要加载占位图显示。...当返回数据,刷新 TableView、CollectionView 时候,进行判断,如果数据为空,则加载占位图。如果数据不为空,则移除占位图,显示数据。...以 TableView 为例: 为 TableView 建立一个 Category,Category 中添加刷新回调 block 属性、占位图 View 属性。
领取专属 10元无门槛券
手把手带您无忧上云