首页 > iOS面试题大家帮帮忙谢谢啦

iOS面试题大家帮帮忙谢谢啦

有一个信息流的数据需要展示,每个cell的布局都不一样(参考QQ空间动态页面),cell里有文字图片回复等,请设计一种展示方式,要求tableView滚动的时候不卡顿。

这个怎么做啊?每个cell的布局都不一样就不能用重用机制


每一种布局写一种configureCell的方法 根据model决定调用哪种方法


可以总结出需要解决两个问题。

  1. 在tableView中显示不同类型的Cell。可参考下面的方案:

    • 给数据源加一个字段,比如Type,用来表示它的类型。在tableView:cellForRowAtIndexPath:方法中,根据数据源源的Type的不同,分别加载不同类型的Cell。

  2. 保证不卡顿。tableView在滑动时卡顿的原因无非是Cell中的数据没有加载完成而导致渲染时在某一界面卡住。可以参考下面的方案:

    • - tableView:estimatedHeightForRowAtIndexPath:方法。根据官方文档的介绍,提供预计高度,可以提升用户体验。这个做法是延缓Cell的高度计算。

    • 利用多线程机制。将计算高度、请求数据这些耗时的操作,开辟另外一个线程进行,不要影响界面的渲染。

    • 如果需要加载大量图片,建议使用SDWebImage或者YYWebImage框架。这个框架可以做到异步加载、断点续传以及缓存机制。或者通过在服务器端处理,将在Cell中加载的图片进行压缩,在点击后或者有WiFi的情况下,再下载原图。这样既可以保证显示流畅,又可以做到节省流量。

    • 视频和图片建议使用云存储。它们提供对多媒体在服务器端处理,省时省力。

上面的方案,仅仅是我自己的构想,具体的操作我没有太多的实践经验。仅供参考。求轻喷。
推荐一篇文章——《iOS 保持界面流畅的技巧》,是YYKit的作者ibireme所写。


看了一眼QQ空间的页面,每条状态的布局是一样的,只是因为内容不同,所选的控件不同,高度也有所不同。都是包含了头像,昵称,内容,点赞,评论等。所以还是用的cell。


可以重用cell啊,对不同内容进行动态高度计算,这样不行么?


根据题目说是,滚动的时候不卡顿,那么,可以在初始化这个tableview的时候就缓存好所有Cell的高度,然后在加载每个Cell的时候就不用再去计算,就不会卡顿,tableview的滑动的卡顿主要原因是Tableview在加载每个cell的时候花费的时间太长,其中这种不定高度的Cell由于在tableview的高度代理里面会普遍使用自己初始化一边这个Cell并赋值得到高度返回的方法,这种方法可能会消耗一定的计算量,因此,会导致卡顿,然后,每个Cell上如果有一些模糊或者一些渲染的高消耗性能的方法,需要延迟执行,当Cell划出界面之后需要取消这些操作,如上是我的一些回答

【热门文章】
【热门文章】