2010-03-08 18 views
3

我創建它包含用於設置基於關閉由GPS收集了一些價值的當前位置的API庫。我想將此位置存儲在我的課程中,稍後如果已設置,請更改我的資料庫的行爲。iPhone:如何在沒有泄漏內存的課程中存儲位置(CLLocationCoordinate2D)?

我腦子裏想的是什麼:

@interface myLib 
{ 
@property (nonatomic, retain) CLLocationCoordinate2D *location; 
} 

@implementation myLib 
{ 
@synthesize location = _location; 

- (void)setLocation:(CLLocationCoordinate2D *)loc { 
location = loc; 
} 

- (void)someFunc { 
if (location != nil) ... 
} 

} 

然而,保留是不是一個CLLocationCoordinate2D對象的有效屬性。

那麼,什麼是節約CLLocationCoordinate2D供以後使用W/O浪費內存的正確方法?

在此先感謝!

回答

0

@synthesize會爲您生成getter和setter。因此這是多餘的 - (void)setLocation:(CLLocationCoordinate2D *)loc locales = loc;(CLLocationCoordinate2D *)loc }

而且技術上的錯誤,因爲這是「分配」二傳手,而不是一個「保留」二傳手。

這是我的猜測泄漏是發生

+0

嗯,這是一個簡單的例子,興田實際設置的呼叫也做一個快速的數學運算。 什麼會匹配字符串@property呢? – Henry 2010-03-08 21:28:25

13

CLLocationCoordinate2D是一個非對象類型。它不會從NSObject繼承,因此它不能是retain ed。因此聲明的實例變量,像這樣

CLLocationCoordinate2D location; 

隨着財產申報,如:

@property (nonatomic, assign) CLLocationCoordinate2D location; 

然後你setLocation:方法很簡單:

- (void)setLocation:(CLLocationCoordinate2D)newLocation { 
    location = newLocation; 
    // other stuff 
} 

setLocation:方法也是可選的,因爲綜合財產將分配給你。但是當你分配一個新的位置時,你似乎想要做其他的事情,所以這應該讓你這樣做。

+0

啊,是的,很好,忘記它不是一個NSObject - 編譯器應該知道這一點,我想知道他是否得到警告,並想知道編譯器在這裏做什麼。 – CVertex 2010-03-08 22:25:58