我有一个关于内存管理的快速问题,我不太确定。我目前有一个locationManager委托,它调用locationManager:didUpdateToLocation:fromLocation
来解析设备位置。我的问题是我在获得[newLocation coordinate]
之后正在考虑添加ReverseGeoCoding,但我不确定在这里进行alloc,因为每次locationManager:didUpdateToLocation:fromLocation
被调用时我将分配一个新的MKReverseGeoCoder?
// LOCATION
-(void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
// GeoCoding:
MKReverseGeocoder *geoCoder = [[MKReverseGeocoder alloc] initWithCoordinate:[newLocation coordinate]];
[geoCoder setDelegate:self];
[geoCoder start];
[self foundLocation];
}
有人能指出我正确的方向吗?我确实尝试在应用程序中执行alloc:didFinishLaunchingWithOptions:但后来意识到我无法访问[newLocation coordinate]。
DyingCactus,如果你只是添加自动释放就不会调用委托方法的原因我猜是因为对象被释放了,是吗?我认为MKReverseGeoCoder会留下并为我的所有电话提供服务,我感到很困惑。现在看来,对于每个locationManager:didUpdateToLocation:fromLocation
,每次调用都会创建一个新实例。这就是我现在所拥有的,感觉好多了:
// INTERFACE:
MKReverseGeocoder *reverseGeoCoding;
@property(nonatomic, retain) MKReverseGeocoder *reverseGeoCoding;
// IMPLEMENTATION:
self setReverseGeoCoding:[[[MKReverseGeocoder alloc] initWithCoordinate:location] autorelease]];
[reverseGeoCoding setDelegate:self];
[reverseGeoCoding start];
非常感谢
加里
答案 0 :(得分:1)
在那里添加自动释放会消除内存问题,但不会调用委托方法。
要解决这两个问题,请在类级别声明反向地理编码器。有关示例,请参阅示例应用CurrentAddress。
另外,如果在完成反向地理编码时想要调用foundLocation方法,请在反向地理编码器的didFindPlacemark方法中调用它,而不是在调用start之后调用它。