EXC_BAD_ACCESS使用retain属性?

时间:2011-05-27 05:03:30

标签: objective-c xcode memory-management properties retain

我的类中有一个名为location的属性,它使用非原子的retain属性。但是,当我第一次将其分配给某些东西时,我收到了EXC_BAD_ACCESS错误。它崩溃了下面代码中的赋值:

- (void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{           
    if(!self.location)
    {
        self.location = 
        [[Point2D alloc] initWithX:newLocation.coordinate.longitude Y:newLocation.coordinate.latitude];
    }

从我记忆中使用retain属性时,它会自动释放当前对象并在合成时保留新对象。我在想它会抛出这个错误,因为我发布了一些不存在的东西。但有没有办法解决这个问题,还是我看错了?此外,当我使用变量本身时,它不会抛出错误,仅在self时。使用。

这也是我的Point2D类信息:

@interface Point2D : NSObject {

}
@property (nonatomic, assign) float x, y;

-(id)initWithX:(float)nx Y:(float)ny;

@end

@implementation Point2D
@synthesize x = _x, y = _y;

-(id)init
{
    return [self initWithX:0.00 Y:0.00];
}

-(id)initWithX:(float)nx Y:(float)ny
{
    self = [super init];

    self.x = nx;
    self.y = ny;

    NSLog(@"initWithX");

    return self;
}

@end

2 个答案:

答案 0 :(得分:0)

检查newLocation以确保其引用和/或其坐标属性不返回空引用。

答案 1 :(得分:0)

您是否合成了该属性?我建议您首先检查一下。如果您收到if(!self.location)部分或者错误,可以查看调试器吗? self.location = [[Point2D alloc] initWithX ...... part?