iOS 如果位置服务打开,表视图滚动滞后
iOS Tableview scroll lagging if location services are ON
我有一个应用程序,我在其中使用 CLLocationManager 的实例获取设备的位置。
现在,当我调用一个函数时,该函数使用 self.locationManager.location
获取表格视图每个单元格 内的位置 。表格视图滚动滞后且不稳定。
但是,如果我关闭对应用程序的位置访问,一切都会顺利进行!
我知道通常由于对 http 调用或图像下载的处理不当导致表视图滞后,但如果是这种情况,如果关闭位置,也会发生同样的情况。
任何人都可以在这里阐明一些问题吗?
在 iOS 9.1 和 iOS 8.4
上测试
已更新 cellForRow 代码....
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@“tableRow” forIndexPath:indexPath];
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObjectOrDoNothing: [AppLoc currentLatitude] forKey:@“latitude”];
[dict setObjectOrDoNothing:[AppLoc currentLongitude] forKey:@“longitude”];
[dict setObjectOrDoNothing:[NSNumber numberWithInteger:indexPath.row] forKey:@“content”];
[[AppManager serviceManager] postDataWithParams:dict];
return cell;
}
使用 AFNetworking 和经纬度方法发布数据的地方基本上执行以下操作:
[[AppLocationsManager sharedInstance] currentLocation].coordinate.latitude;
[[AppLocationsManager sharedInstance] currentLocation].coordinate.longitude;
你应该在没有手机的情况下获得位置,然后调用 tableview.reloaddata()
p/s:我觉得你应该分享你的代码,这样很容易帮助
因此,事实证明 locationManager.location
方法非常昂贵,特别是在高频使用时(就像这里的情况一样)。去解决它。我缓存了来自位置管理器的位置,并指向所有应用程序组件,甚至 table 单元 使用缓存的位置 而不是每次都窃听位置管理器。
感谢大家的帮助。
我有一个应用程序,我在其中使用 CLLocationManager 的实例获取设备的位置。
现在,当我调用一个函数时,该函数使用 self.locationManager.location
获取表格视图每个单元格 内的位置 。表格视图滚动滞后且不稳定。
但是,如果我关闭对应用程序的位置访问,一切都会顺利进行!
我知道通常由于对 http 调用或图像下载的处理不当导致表视图滞后,但如果是这种情况,如果关闭位置,也会发生同样的情况。
任何人都可以在这里阐明一些问题吗?
在 iOS 9.1 和 iOS 8.4
上测试已更新 cellForRow 代码....
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@“tableRow” forIndexPath:indexPath];
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObjectOrDoNothing: [AppLoc currentLatitude] forKey:@“latitude”];
[dict setObjectOrDoNothing:[AppLoc currentLongitude] forKey:@“longitude”];
[dict setObjectOrDoNothing:[NSNumber numberWithInteger:indexPath.row] forKey:@“content”];
[[AppManager serviceManager] postDataWithParams:dict];
return cell;
}
使用 AFNetworking 和经纬度方法发布数据的地方基本上执行以下操作:
[[AppLocationsManager sharedInstance] currentLocation].coordinate.latitude;
[[AppLocationsManager sharedInstance] currentLocation].coordinate.longitude;
你应该在没有手机的情况下获得位置,然后调用 tableview.reloaddata()
p/s:我觉得你应该分享你的代码,这样很容易帮助
因此,事实证明 locationManager.location
方法非常昂贵,特别是在高频使用时(就像这里的情况一样)。去解决它。我缓存了来自位置管理器的位置,并指向所有应用程序组件,甚至 table 单元 使用缓存的位置 而不是每次都窃听位置管理器。
感谢大家的帮助。