1

Apple の Web サイトで入手できるCurrentAddress サンプルの MapViewController.m ファイルから直接取り出したこのコードを見ています。

- (void)dealloc
{
    [reverseGeocoder release];
    [mapView release];
    [getAddressButton release];

    [super dealloc];
}

- (IBAction)reverseGeocodeCurrentLocation
{
    self.reverseGeocoder =
        [[[MKReverseGeocoder alloc] initWithCoordinate:mapView.userLocation.location.coordinate] autorelease];
    reverseGeocoder.delegate = self;
    [reverseGeocoder start];
}

オブジェクトを割り当てるときの自動解放の機能は何だろうと思っています。(reverseGeocoder は、retain プロパティを使用して設定された MapViewController クラスの ivar です。) アプリケーションにこれに似たコードがあり、どちらの方法でも機能するようです。

4

1 に答える 1

2

プロパティを設定すると保持カウントが増加します (+1) が、 + (+1) でreverseGeocoderオブジェクトを作成しているため、保持カウントが 2 にならないように (-1) する必要があります。allocinitautorelease

どちらの方法でも機能しますが、唯一の違いは、そうしない autoreleaseと漏れることです。

reverseGeocoder は ivar です

確かにそうですが、self.reverseGeocoderフォームを使用しているときは ivar に直接アクセスしていないことに注意してください。代わりに、setReverseGeocoder:自分で作成したか、コンパイラによって @syntheized された関連する関数を呼び出しています。

参照: http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/MemoryMgmt/MemoryMgmt.html

And: 宣言されたプロパティに対してどの同等のコードが合成されますか?

于 2011-04-29T19:52:04.963 に答える