Как сохранить местоположение (CLLocationCoordinate2D) в классе без утечки памяти? - PullRequest
3 голосов
/ 09 марта 2010

Я создаю библиотеку, которая содержит API для установки текущего местоположения на основе некоторого значения, собранного GPS. Я хочу сохранить это местоположение в моем классе, а затем изменить поведение моей библиотеки, если оно установлено.

Я имел в виду:

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

@implementation myLib
{
@synthesize location = _location;

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

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

}

Однако retain не является допустимым свойством для объекта CLLocationCoordinate2D.

Итак, как правильно сохранить CLLocationCoordinate2D для последующего использования без потери памяти?

Ответы [ 2 ]

13 голосов
/ 09 марта 2010

CLLocationCoordinate2D - это необъектный тип. Он не наследуется от NSObject, поэтому не может быть retain ed. Итак, объявите переменную вашего экземпляра следующим образом:

CLLocationCoordinate2D location;

С объявлением свойства вроде:

@property (nonatomic, assign) CLLocationCoordinate2D location;

И тогда ваш setLocation: метод просто:

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

Этот setLocation: метод также является необязательным, поскольку синтезированное свойство будет присваиваться вам. Но вы, кажется, хотите сделать что-то еще, когда назначено новое местоположение, так что это должно позволить вам сделать это.

0 голосов
/ 09 марта 2010

@ synthesize сгенерирует для вас методы получения и установки.

Поэтому это избыточно - (void) setLocation: (CLLocationCoordinate2D *) loc { location = loc; }

И технически неверно, потому что это «назначить» сеттер, а не «сохранить» сеттер.

Здесь я предполагаю, что происходит утечка

...