2011-06-02 46 views
0

我的應用程序使用GPS,並在每次更新GPS時分配一個NSNumber實例變量,並且在發佈前的最後一次測試中,我發現它泄漏了很多。我很確定,我知道哪些線路會導致泄漏,但我無法解決如何解決這個問題。客觀c泄漏NSNumber被保留

latitude = [[NSNumber numberWithFloat:[[coordinates objectAtIndex:0] floatValue]] retain]; 

這條線是我的GPS更新方法,並定期運行。 Latitude是一個實例變量,當我刪除保留時,我不能再訪問我需要的其他方法中的變量。我有dealloc方法中釋放的變量,但似乎沒有做任何事情。

我瞭解alloc-release範例,但我仍然不確定如何解決此問題。

回答

4

設置之前,您必須釋放以前保留的值。否則,當您分配新指針時,之前釋放的對象沒有任何引用,並且永遠不會釋放它。

要做到這一點很容易,我建議將其設置爲@property並使用self.latitude = [NSNumber numberWithFloat:[[coordinates objectAtIndex:0] floatValue]];。請注意,保留不再用於分配。這是假設你的財產設置了retain標誌,並保留給你。

I.e.

@property (nonatomic, retain) NSNumber *latitude

+0

感謝馬克,似乎已清除它。 – MechEngineer 2011-06-02 16:02:49

0

沒有看到你的代碼的其餘部分它很難說究竟應該如何解決這個問題,但是一個良好的方法可能是嘗試自動釋放它想:

latitude = [[NSNumber numberWithFloat:[[coordinates objectAtIndex:0] floatValue]] autorelease]; 

的另一件事考慮將緯度設爲@property並將其設置爲保留。這樣,當你設置它時,它將釋放以前的值。再說一遍,不知道你如何使用緯度,很難指出你的方向。

+0

將'-autorelease'發送到該對象可能會使其在其他方法中不可用。 – 2011-06-02 03:36:00