0

私は mkreversegeocoder クラスの使用法を学んでおり、次の 3 行のコードを使用して didFindPlacemark メソッドを実装することで機能するようになりました。

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

上記は正常に機能しますが、メモリとリソースの管理を考えてアプリを改善しようとして、geoCoder 割り当ての自動解放を追加しようとしています。

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

上記のパターンは Apple のドキュメントで使用されているため、正しいことのように思えます。ただし、autorelease を追加すると、didFindPlacemark メソッドは呼び出されません。autorelease が geoCoder オブジェクトをすぐに解放するかのようです。

geoCoder オブジェクトは ivar として宣言されているため、機能するはずです。このパターンを使用したリンゴの例は機能するため、問題は私の実装にあるはずですが、どこが間違っているのかわかりません。

何が起こっているのか、どうすればこれを進めることができるのかについて、誰かの意見をいただければ幸いです。

よろしくお願いします

4

1 に答える 1

1

geoCoderApple サンプル アプリ CurrentAddress のような保持プロパティを定義しましたか?

彼らのサンプル アプリでは、プロパティ アクセサーを使用してジオコーダーが設定されています。それ以外の場合、メソッドを終了すると自動解放によって ivar が解放されます。

その行を次のように変更します。

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

また、必ず次の場所でリリースしてdeallocください。

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