我对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。
答案 0 :(得分:0)
我不想分配/启动a CLLocation每次 调用cellForRowAtIndexPath ..
为什么不呢?你知道这会导致性能问题吗?你马上释放它们,所以它们没有占用额外的记忆。 CLLocation看起来像一个非常轻量级的类,并且Objective-C运行时进行了大量优化,因此它们可能很快就会分配/初始化。在你看到滚动/性能/内存问题之前,我会选择有效且易于维护的内容。
过早优化是所有邪恶的根源 - Donald Knuth
答案 1 :(得分:0)
您的结果对象是NSString - 只需创建一个包含NSString的类,以及必要时中间数据的引用/ ivars。然后使用观察者习语,只需在字符串更改时更新单元格(设计它以使字符串取决于坐标)。你可以创建一个在初始化时获取一组参数的类(例如坐标),在初始化期间创建一个NSString,然后在数据永不改变的情况下引用结果。它实际上取决于你期望的数据会变异,以及频率是多少。