ios UICollectionView 加载数据后 滑动卡顿问题

最近项目的资源图片变大了,滑动时总是卡顿,在这里用NSOperationQueue解决了一下

.h 文件
@interface CollectionViewCell : UICollectionViewCell
// 赋值
@property (nonatomic, strong) NearRentListModel *listModel;
// 队列
@property (nonatomic, strong) NSOperationQueue *queue;

.m 文件
// 懒加载
- (NSOperationQueue *)queue {

    if (!_queue) {
        _queue = ({
            NSOperationQueue *q = [[NSOperationQueue alloc]init];
            //设置最大并行操作数为1相当于将queue设置为串行线程
            q.maxConcurrentOperationCount = 1;
            q;
        });
    }
    return _queue;
}
// 调用set方法
- (void)setListModel:(NearRentListModel *)listModel {

    _listModel = listModel;
   // 这里展示其他数据(根据项目需要而定)

// 开始使用,解决卡顿
if (self.queue.operationCount >= 2) {
        //如果self.queue.operations[0]正在执行的话,不会被强行中止
        [self.queue cancelAllOperations];
    }
    NSInvocationOperation *operation = [[NSInvocationOperation alloc]
                                        initWithTarget:self
                                        selector:@selector(loadImg)
                                        object:nil];

    [self.queue addOperation:operation];

}

// 调用 展示网络图片
- (void)loadImg{
    dispatch_async(dispatch_get_main_queue(), ^{
         [_headerImg sd_setImageWithURL:[NSURL URLWithString:_listModel.avatar_path] placeholderImage:MoTo_User_headerimage];

        [_img sd_setImageWithURL:[NSURL URLWithString:_listModel.cover_photo] placeholderImage:nil];
    });
}

原文地址:https://www.cnblogs.com/xingsmile/p/11145471.html

时间: 2024-07-29 13:30:37

ios UICollectionView 加载数据后 滑动卡顿问题的相关文章

android ListView使用软引用解决加载网络图片快速滑动卡顿

前段时间做了一个新闻类的项目,新闻列表中的图片都是网络图片,刚开始是自定义ImageView(等于是在其中加了一个异步下载然后设置背景)虽然可以加载网络图片,不过当快速滑动的时候会很卡顿,而且前期没有对Bitmap做回收,导致OOM(内存溢出),后来上网查了各种资料,大概有两种思路: 1.滑动的时候不加载图片,等滑动停止之后再加载,这样就需要对ListView进行OnScrollListener监听,得到屏幕上显示的开始和结束的位置(当有headView和footerView时需要换算)然后下载

关于android中gridview数据量很大的时候,在加载gridview时会出现卡顿的现象

好的解决办法就是先加载一定数量的数据,然后在最下方提示正在加载! 动态加载就是把放入adapter中的数据分好几次加载.在用户拖动gridview时再加载一定的数据,和sina微博的客户端类似. 给gridview添加OnScrollListener监听事件默认会覆盖下面两个方法: 下面列举个列子: <com.ui.widget.LazyGridView xmlns:android="http://schemas.android.com/apk/res/android" andr

hive加载数据后查询为空

hive加载的数据为通过flume-ng收集的数据,然后直接将其sink指定为hdfs,在指定hdfs sink的前缀时获取header中的host内容,而前一个源根本没有将host传递过来,所以导致存入hdfs中的数据文件文件名为以点开头,如下: 接下来在hive中创建一个外部表(内部表也一样),导入数据时指定映射到上图的文件夹时如:alter table tablname add partition (dt='date') location '/flume/date';则在此文件夹下如果存在

ExtJS中关于分页加载数据后执行一个回调函数的问题

前几天,一个项目中有用到ExtJS.之前修改的时候,只是在Store Load的时候执行一个回调,这个会导致翻页的时候,没有执行这个回调,而这个回调做的恰好是一些数据的格式验证不可或缺的. 被这个问题困扰了很久,也查了很多的关于ExtJs Store的应用和API,最终找到了一个解决的办法,其实很简单,就是在Store里面添加一个load事件的监听. new Ext.data.Store({... listeners: { "load": function (store, operat

小程序加载数据后滚动条加载到底部

1 wx.createSelectorQuery().select('#body').boundingClientRect(function (rect) { 2 // 使页面滚动到底部 3 wx.pageScrollTo({ 4 scrollTop: rect.bottom 5 }) 6 }).exec() 1.通过wx.createSelectorQuery创建一个 SelectorQuery 对象 2.select 类似 jq 的选择器 3.通过调用 boundingClientRect

winform异步加载数据到界面

做一个学习记录. 有两个需求: 1.点击按钮,异步加载数据,不卡顿UI. 2.把获取的数据加载到gridview上面. 对于需求1,2,代码如下: public delegate void ShowDatatableDelegate(DataTable dt); private async void button1_Click(object sender, EventArgs e) { //way1.ok Thread t = new Thread(ShowDatatable); t.IsBac

动态加载数据新的可行性

动态加载数据就是随着用户的交互情况来加载数据,避免一次全部加载浪费流量和卡顿. 最典型的情况就是用户查看每天的信息这种状况. 最开始我的做法是用一个scrollview和三个view来解决.先实现一个轮播图效果,每次用户左滑和右滑之后又将页面跳回到中间的页面,这个时候中间页面的状态应该和左滑或右滑页面的状态相同.所以每次都是先加载左中右三天数据,滑动到右边后,重置三天数据跳转到中间. 但这种有个问题,就是很难实现bounce反弹效果,即使实现了代码会非常乱,还有就是快速滑动的时候造成的无法滑动问

vue2.0无限滚动加载数据插件

  做vue项目用到下拉滚动加载数据功能,由于选的UI库(element)没有这个组件,就用Vue-infinite-loading 这个插件代替,使用中遇到的一些问题及使用方法,总结作记录! 安装:npm install vue-infinite-loading –save 引入 ES6 import InfiniteLoading from 'vue-infinite-loading'; export default { components: { InfiniteLoading, }, }

iOS开发之记一次App卡顿Bug的解决历程(踩了一个StoryBoard的坑)

虽然今天是周末,但是还是要学习的不是.写这篇博客的目的呢是记录一下自己在上次项目迭代中踩的坑,不过这个坑已经填上了.虽然坑不大,但是踩上去肯定能崴脚.其实还是那句话,在没人给你指路的情况下,踩的坑多了,慢慢的就成长了.为了填今天要讲的这个坑,午觉都没睡呢.当然今天博客的内容并不高深,而且出现的几率还是蛮大的,所以喽就记录一下.也许你已经踩过,或者你已经将此坑填上,但是今天是我踩了一脚呢,没办法,还是记录一下吧. 解决历程用一个字描述就是:“删”. 一.描述这个“坑” 首先呢,我们先来看一下这个B