2011-09-02 54 views
0

我正在學習使用mkreversegeocoder類,並使用以下三行代碼並實現didFindPlacemark方法使它工作。reversegeocoder autorelease問題

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

上述工作正常,但是......在試圖改善考慮內存管理和資源我的應用程序,我試圖添加一個自動地理編碼器配置爲這樣:

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

蘋果在他們的文檔中使用了上述模式,所以它看起來是正確的。但是,當我添加autorelease時,didFindPlacemark方法永遠不會被調用。就好像autorelease立即釋放geoCoder對象。

geoCoder對象被聲明爲伊娃,所以它應該工作。使用這種模式的蘋果示例工作,所以問題必須與我的實現,但我不能確定我要去哪裏錯了。

我將不勝感激任何有關發生什麼事情以及如何讓這種情況發生的信息。

問候

回答

1

有你的蘋果示例應用程序CurrentAddress定義geoCoder一個保留屬性怎麼樣?

在他們的示例應用程序中,地理編碼器使用屬性訪問器設置,否則autorelease將在您退出該方法時釋放ivar。

更改該行:

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

此外,一定要釋放它在dealloc

- (void)dealloc 
{ 
    [geoCoder release]; 
    [super dealloc]; 
} 
+0

嗨,這個感謝,這是我需要的:-)我沒」確切的答案使用屬性訪問器。我還是新來的,所以忘了在當前事件循環處理之前沒有任何東西保留對象的引用。 –