技巧说明:一个以上的线程同时操作NSArray, 任何一个有写操作,都容易引起“Collection was mutated while being enumerated” ”
所以在其中只有读操作的线程中,将此Array拷贝一份出来进行读取,可以解决此问题。
使用场景:移动地图时,地图上会及时出现当前窗口经纬度范围的物体(比如一些自己geo数据库中的优惠餐馆等)
程序结构:1. 在移动地图事件上触发网络请求。
2. 请求返回后,将返回的数据用MKAnnotion的方式显示在地图上
用户体验要求:在请求返回前,用户可以继续移动地图。这意味这1和2是异步的,需要在不同的线程中进行
主要代码:
线程1中,发出网络请求
- (void)mapView:(MKMapView *)map regionDidChangeAnimated:(BOOL)animated
{
self.searchResult.location = [mapView region];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
[self.searchResult loadData];
}
线程2中渲染mapView
- (void)update {
NSArray *sitesResult = [NSArray arrayWithArray:self.searchResult.results];
if (sitesResult && [sitesResult count]>0) {
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
for (GHSite *site in sitesResult) {
BOOL found = NO;
for (MKAnnotation *ann in [mapView annotations]) {
if ([[ann title] isEqualToString:site.title]) {
found =YES;
}
}
if(!found)
[mapView addAnnotation:site];
}
[sitesResult release];
[super viewDidLoad];
}
}
注意,如果没有下面这句话,会发生异常:
"Collection was mutated while being enumerated”
NSArray *sitesResult = [NSArray arrayWithArray:self.searchResult.results];
分享到:
相关推荐
Iphone数组一些基础操作 NSArray/NSMutableArrayIphone
object-c 适合初学者,主要学习数组,包括固定数组和可变数组,以及创建简单类文件和使用方法
Object C 字符串和数组NSString NSArray操作
NSArray排序demo
官方文档,数组类的最权威文档。各种数组方法的详细说明。英文的。
NSArray *arr = [[NSArray alloc] initWithObjects:如果要初始化1000项,可以这样:当然换成swift就超级简单了
比较完美的解决了数组越界的问题, 在debug模式下会崩溃 , 在release不会崩溃 , 开发过程中 , 方便调试 , 正式环境中 减少崩溃.
上篇文章给大家介绍了IOS多线程实现多图片下载1,本文继续给大家介绍ios多线程下载图片。 这次是用多线程进行图片的下载与存储,而且考虑到下载失败,占位图片的问题(第一张就是下载失败的图片) 闲话少说,上代码吧...
NSString NSArray NSDictionary 方法名释义
NSPredicate应用,包括以下几个部分: 1、字符串,正则表达式的匹配; 2、字符串数组NSArray和NSMutableArray的快捷过滤方式; 3、自定义对象数组NSArray和NSMutableArray的快捷过滤方式;
Swift-NSArray数组的使用
OC-NSArray数组的使用Demol
1. 数组的常用处理方式 //--------------------不可变数组 //1....NSString *s1 = @zhangsan; NSString *s2 = @lisi; NSString *s3 = @wangwu;...NSArray *array1 = [[NSArray ...NSArray *array2 = [NSArray arrayWithOb
主要介绍了IOS 开发之 NSMutableArray与NSArray 的区别的相关资料,希望通过本文能掌握这部分内容,需要的朋友可以参考下
NSArray,NSSet,NSEnumerator,NSDictionary及对应Mutable介绍,有对应的实例代码
Objective-C的数组比C++,Java的数组强大在于,NSArray保存的对象可以是不同的对象。但只能保存对象,int ,char,double等基本数据类型不能直接保存,需要通过转换成对象才能加入数组。
方法bjl_shuffledArray - ( NSArray *)bjl_shuffledArray 返回值返回一个数组,其中所有元素都被随机排列。 bjl_shuffledArrayWithItemLimit: - ( NSArray *)bjl_shuffledArrayWithItemLimit:( NSUInteger )...
集合的遍历操作是开发中最常见的操作之一,从C语言经典的for循环到利用多核cpu的优势进行遍历,开发中ios有若干集合遍历方法,本文通过研究和测试比较了各个操作方法的效率和优略势,并总结几个使用集合遍历时的小...
这是NSArray,NSSet,NSEnumerator,NSDictionary及对应Mutable介绍的示例程序,具体参考: http://blog.csdn.net/htttw/article/details/7884218