0

我正在学习使用 mkreversegeocoder 类,并使用以下三行代码使其工作并实现 didFindPlacemark 方法。

geoCoder = [[MKReverseGeocoder alloc] initWithCoordinate:[u coordinate]];
[geoCoder setDelegate:self];
[geoCoder start];

以上工作正常,但是......在尝试通过考虑管理内存和资源来改进我的应用程序时,我正在尝试添加一个自动释放geoCoder分配,如下所示:

geoCoder = [[[MKReverseGeocoder alloc] initWithCoordinate:[u coordinate]] autorelease];

苹果在其文档中使用了上述模式,因此这似乎是正确的做法。但是,当我添加自动释放时,不会调用 didFindPlacemark 方法。好像自动释放会立即释放 geoCoder 对象。

geoCoder 对象被声明为 ivar,因此它应该可以工作。使用这种模式的苹果示例有效,所以问题一定出在我的实现上,但我无法弄清楚我哪里出错了。

我会很感激任何人对正在发生的事情以及我如何能够做到这一点的意见。

最好的祝福

4

1 回答 1

1

您是否geoCoder在 Apple 示例应用 CurrentAddress 中为 like 定义了一个保留属性?

在他们的示例应用程序中,地理编码器是使用属性访问器设置的,否则当您退出该方法时,自动释放将释放 ivar。

将该行更改为:

self.geoCoder = [[[MKReverseGeocoder alloc] initWith...] autorelease];

还要确保在以下位置发布它dealloc

- (void)dealloc
{
    [geoCoder release];
    [super dealloc];
}
于 2011-09-02T21:38:01.770 回答