【发布时间】:2015-11-24 07:07:12
【问题描述】:
for ( NSDictionary *detailsDict in rsltArray) { NSString *OfficeId =[detailsDict objectForKey:@"ObjectId"]; NSString *catID =[detailsDict objectForKey:@"catID"]; NSString *ObjType =[detailsDict objectForKey:@"ObjectType"];
NSString *getImage = [NSString stringWithFormat:@"select catMarkericon from TBL_Category where catID='%@'",catID];
NSMutableArray * imageArray = [self.database getDataListBySQLQueryStatement:getImage];
NSString *officeLogo = [[imageArray objectAtIndex:0] objectForKey:@"catMarkericon"];
NSArray *parts = [officeLogo componentsSeparatedByString:@"/"];
NSString *filename = [parts lastObject];
NSString *OfficeName;
NSString *OfficeAddress;
if([[UserDefaults getLanguageSelection]isEqualToString:@"en"])
{
OfficeName =[detailsDict objectForKey:@"ObjectNameEnglish"];
OfficeAddress =[detailsDict objectForKey:@"ObjectAddressEnglish"];
}
else
{
OfficeName =[detailsDict objectForKey:@"ObjectNameArabic"];
OfficeAddress =[detailsDict objectForKey:@"ObjectAddressArabic"];
}
double Off_lat =[[detailsDict objectForKey:@"Latitude"] doubleValue];
double Off_long =[[detailsDict objectForKey:@"Longitude"] doubleValue];
tempLocation = [[CLLocation alloc] initWithLatitude:Off_lat longitude:Off_long];
CLLocationDistance meters = [tempLocation distanceFromLocation:CurrentLoc]/1000;
if(meters<=Dist)
{
[arrListdata addObject:detailsDict];
if ([catID isEqualToString:selectID]) {
tempCoordinate = [ARGeoMarkerco coordinateWithLocation:tempLocation locationTitle:OfficeName withid:OfficeId withaddress:OfficeAddress withimage:filename withcatId:catID withObjType:ObjType selectValue:YES newmarker:NO];
[locationArray addObject:tempCoordinate];
}
else{
tempCoordinate = [ARGeoMarkerco coordinateWithLocation:tempLocation locationTitle:OfficeName withid:OfficeId withaddress:OfficeAddress withimage:filename withcatId:catID withObjType:ObjType selectValue:NO newmarker:NO];
[locationArray addObject:tempCoordinate];
}
}
}
我正在使用这样的 for 循环,我必须迭代超过 1500 个数据,并且它会在 4 到 7 秒内卡住我的应用程序是任何解决此问题的方法
【问题讨论】:
-
您需要显示更多代码。你对每本字典做什么。循环本身根本不会花费太多时间。
-
根据您给我们的信息:编写高效的代码,使用高效的数据结构。
-
NSEnumerator *e = [array objectEnumerator];标识对象; while (object = [e nextObject]) { // 对对象做一些事情 }
-
听起来您想为此使用后台线程,以避免阻塞主(UI)线程。
-
1500 不应该太大而不能通过蛮力完成。字典里有什么?