适当的时候,用递归取代for循环
来源:互联网 发布:单片机花贲浇花 编辑:程序博客网 时间:2024/06/10 19:43
在开发过程中,for循环是一个很常见的操作,但有时候针对某些需求它却显得有些吃力。
比如:按照顺序下载多张图片。
1、正常的做法: 使用for循环下载,代码如下:
for (NSString *photoUrl in photosUrlArray) { [[SDWebImageManager sharedManager] downloadImageWithURL:[NSURL URLWithString:photoUrl options:SDWebImageHighPriority progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { NSLog(@"%@",image); }];}
但是,由于 downloadImageWithURL 是异步执行的,每张图片的大小很可能不同,很难保证这些图片下载完成后和下载的时的顺序一样。
所以必须保证第一个图片下载完成后再去下载第二个图片,接着以此类推。所以用递归是一个很好的办法。
NSInteger imageCount = self.model.photosUrlArray.count;- (void)downloadImages:(NSArray *)photosUrlArrray{ imageCount--; if (imageCount<0) { return; } NSString *photoUrl = photosUrlArrray[imageCount]; @weakify(self) [[SDWebImageManager sharedManager] downloadImageWithURL:[NSURL URLWithString:photoUrl] options:SDWebImageHighPriority progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { @strongify(self) NSLog(@"%@",image); [self configPhotos:photosUrl InView:cell]; }];}
如上代码所示,封装下载方法为一个函数,图片下载完成后,立刻调用自己。这样,我们既保证了图片的顺序下载,又不必考虑图片的总数量。
因此,在开发过程中,当对循环的顺序要求比较严格,而循环内部又是一个个异步操作的时候,可以考虑使用递归的处理方法。只需要找到递归的终止条件即可。
阅读全文
0 0
- 适当的时候,用递归取代for循环
- linux适当的时候用ps、top查看线程状态
- for循环里面的递归
- Woring Practice-适当的时候赞赏他人
- for循环里面的递归调用探讨
- 用数组+for循环解决递归问题
- 用堆空间初始化引用,在适当的时候释放堆空间
- div 中的 ul li 单个无限循环。 多个的时候可以用递归实现
- for循环里的递归,和双重递归
- 高性能二分查找BinarySearch循环取代递归版
- BottomNavigationBar 取代 TabHost的时候早已到来
- for循环时候可以+2循环
- 适当的选择sql递归可以很有效的提高效率
- 尾递归 or for循环 ?
- 尾递归 or for循环?
- for循环/递归 实现九九乘法表
- 努力成功一个多面手,在适当的时候,能选择适合的语言,方案来解决问题
- java中的递归方法和for循环
- java实现文件的复制
- 更新phonegap2.9打包的dojo开发页面的ios app遇到的问题
- [LeetCode] 61. Rotate List
- libssl.so.10: cannot open shared object file: No such file or directory
- 几种进程间的通信方式
- 适当的时候,用递归取代for循环
- Python编程规范
- msp430的DCO校准值被清除后该如何处理
- EDK学习笔记——C函数整理
- 连续子数组的最大和
- React Native开发笔记
- Spring整合Ehcache管理缓存
- poj 1511 Invitation Cards(SPFA)(矩阵以及邻接表对比)
- Android TCP socket通信