gpt4 book ai didi

iphone - MKReverseGeocoder 和内存管理?

转载 作者:搜寻专家 更新时间:2023-10-30 19:45:07 27 4
gpt4 key购买 nike

我想问一下关于 MKReverseGeocoder 的内存管理,在 iOS4.3 之前我一直在使用下面的代码,分配 MKReverseGeocoder 然后释放它reverseGeocoder:didFindPlavemarkreverseGeoCoder:didFailWithError 视情况而定。

然而,对于 iOS4.3,我得到了 EXC_BAD_ACCESS,它似乎来自 reverseGeocoder:didFailWithError 中的版本。如果有人能指出正确的方向,我将不胜感激,我可以使用 autoRelease,这会分配 geoCoder 足够长的时间让代表完成它的工作吗?

// ALLOC & START
MKReverseGeocoder *myGeocoder = [[MKReverseGeocoder alloc] initWithCoordinate:[lastGoodLocation coordinate]];
[myGeocoder setDelegate:self];
[myGeocoder start];

.

// DID FIND
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark {
NSLog(@"GEOCODE: didFindPlacemark");
[self createLocation:placemark];
[geocoder release];
}

.

// DID FAIL
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error {
NSLog(@"GEOCODE: didFailWithError");
[self createLocation:nil];
[geocoder release];
}

最佳答案

经过一番搜索,我认为解决方案可能是设置一个 iVar 来保存 MKReverseGeocoder。这样我就可以使用自动释放,同时仍然确保 iVar 将保持在 geoCoder 上,直到下一次设置 iVar。有趣的是,上面的代码只从 reverseGeocoder:didFailWithError 中产生一个 EXC_BAD_ACCESS,而不是从 reverseGeocoder:didFindPlacemark 中产生。我还检查了保留计数(是的,我知道它不可靠,但我想看看)并且在发布之前(崩溃)两种方法都报告保留计数为 1。我唯一能猜到的是地理编码对象可能仍然是当我发布时在某处使用。在一种方法中分配并使用回调中的指针释放也感觉很困惑。

@property(nonatomic, retain)MKReverseGeocoder geoCoder;

.

[self setGeoCoder:[[[MKReverseGeocoder alloc] initWithCoordinate:coord] autorelease]];
[[self geoCoder] setDelegate:self];
[[self geoCoder] start];

关于iphone - MKReverseGeocoder 和内存管理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5299557/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com