0

我对 CLLocation 有一些内存问题。

CLLocation *annotation = [[CLLocation alloc] initWithLatitude:[[tempDict objectForKey:@"lat"] doubleValue] longitude:[[tempDict objectForKey:@"lon"]doubleValue]];
CLLocation *item2 = [[CLLocation alloc] initWithLatitude:[newLatString doubleValue] longitude:[newLongString doubleValue]];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%.1f km",[item2 distanceFromLocation:annotation]/1000];
[annotation release];
[item2 release];

所以我尝试这样做,但我意识到你不能设置注释的坐标。

CLLocationCoordinate2D tempCoordinate = annotation.coordinate;
tempCoordinate.latitude = [[tempDict objectForKey:@"lat"] doubleValue];
tempCoordinate.longitude = [[tempDict objectForKey:@"lon"] doubleValue];
    annotation.coordinate = tempCoordinate;

有解决方法吗?我不想每次调用 cellForRowAtIndexPath 时都分配/初始化一个 CLLocation ..

4

2 回答 2

0

我不想每次调用 cellForRowAtIndexPath 时都分配/初始化一个 CLLocation ..

为什么不?你知道它会导致性能问题吗?您会立即释放它们,因此它们不会占用额外的内存。CLLocation 看起来像一个非常轻量级的类,并且 Objective-C 运行时已经过大量优化,因此它们可能会很快地分配/初始化。在您看到滚动/性能/内存问题之前,我会选择可行且易于维护的方法。

过早的优化是万恶之源 - Donald Knuth

于 2010-09-28T03:55:44.603 回答
0

你的结果对象是一个 NSString - 只需创建一个包含 NSString 的类,以及必要时中间数据的引用/ivars。然后使用观察者习语,只需在字符串更改时更新单元格(将其设计为字符串取决于坐标)。您可能会创建一个类,它在初始化时采用一组参数(例如坐标),在初始化期间创建一个 NSString,然后在您的数据从未更改时引用结果。这实际上取决于您期望哪些数据会发生变异,以及以什么频率发生变异。

于 2010-09-28T04:16:14.167 回答