如何存储类中的位置(CLLocationCoordinate2D)W / O内存泄露?

问题描述 投票:3回答:2

我创建它包含用于设置基于关闭由GPS收集了一些价值的当前位置的API库。我想存储这个位置在我的课以后,如果它被设置改变我的媒体库的行为。

我脑子里想的是:

@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浪费内存的正确方法?

iphone objective-c location
2个回答
13
投票

CLLocationCoordinate2D是非对象类型。它不会从NSObject继承所以它不能被retained。所以,你的声明实例变量,像这样

CLLocationCoordinate2D location;

随着财产申报,如:

@property (nonatomic, assign) CLLocationCoordinate2D location;

然后你setLocation:方法很简单:

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

setLocation:方法也是可选的,因为合成的属性会为你分配。但你似乎想要做一些其他的东西,当一个新的位置分配,所以这应该让你这样做。


0
投票

@synthesize会为您生成getter和setter。

因此,这是多余的 - (无效)setLocation:(CLLocationCoordinate2D *)LOC {位置= LOC; }

和技术上的错误,因为这是“分配”二传手,而不是一个“保留”二传手。

这是我的猜测泄漏是发生

© www.soinside.com 2019 - 2024. All rights reserved.