我创建它包含用于设置基于关闭由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浪费内存的正确方法?
CLLocationCoordinate2D
是非对象类型。它不会从NSObject
继承所以它不能被retain
ed。所以,你的声明实例变量,像这样
CLLocationCoordinate2D location;
随着财产申报,如:
@property (nonatomic, assign) CLLocationCoordinate2D location;
然后你setLocation:
方法很简单:
- (void)setLocation:(CLLocationCoordinate2D)newLocation {
location = newLocation;
// other stuff
}
这setLocation:
方法也是可选的,因为合成的属性会为你分配。但你似乎想要做一些其他的东西,当一个新的位置分配,所以这应该让你这样做。
@synthesize会为您生成getter和setter。
因此,这是多余的 - (无效)setLocation:(CLLocationCoordinate2D *)LOC {位置= LOC; }
和技术上的错误,因为这是“分配”二传手,而不是一个“保留”二传手。
这是我的猜测泄漏是发生